2016-01-20 19 views
1

我想知道在Spark中是否有可能創建RDD的Tuple5。 我只能設法得到Tuple4,但沒有更多。Cogroup 5 RDD(獲得Tu​​ple5或更多)

JavaPairRDD<PartitionKey, Tuple4<Iterable<Cat>, Iterable<Dog>, Iterable<Fish>, Iterable<Monkey>>> 

    JavaPairRDD<PartitionKey, Cat> RDD1 = getRDD1(); 
    JavaPairRDD<PartitionKey, Dog> RDD2 = getRDD2(); 
    JavaPairRDD<PartitionKey, Fish> RDD3 = getRDD3(); 
    JavaPairRDD<PartitionKey, Monkey> RDD4 = getRDD4(); 
    JavaPairRDD<PartitionKey, Cow> RDD5 = getRDD5(); 

    return RDD1.cogroup(RDD2, RDD3, RDD4); 

你怎麼會做這樣的事情:

JavaPairRDD<PartitionKey, Tuple5<Iterable<Cat>, Iterable<Dog>, Iterable<Fish>, Iterable<Monkey>, Iterable<Cow>>> = RDD1.cogroup(RDD2, RDD3, RDD4, RDD5); 

我真的需要那些牛:)

謝謝

+0

我還期待着爲同樣的答案,如果你發現有任何線索請分享 – rohit

+0

@rohit我們去了不協同組另一種解決方案......(遲到的回答但它可能會幫助其他人) – Fundhor

+0

你可以給出一些想法,你認爲你做了一些重塑,以避免5的元組,但它會很高興知道想法。 – rohit

回答

1

我們沒有使用協同組。 我們創建了一個包含每個列表的超類對象。

對於5個RDDS的每一個:

oneOfThe5RDD.join(superRDD).mapToPair(tuple -> { 

    SuperObject superObject = tuple._2()._1(); 
    superObject .setListXXX(IteratorUtils.toList(tuple._2()._2().iterator())); 
    return new Tuple2<>(tuple._1(), superObject); 
});