Cogroup 5 RDD(获取Tuple5或更多)

时间:2016-01-20 13:50:46

标签: java apache-spark tuples

我想知道Spark是否有可能创建一个RDD的Tuple5。 我只能设法获得Tuple4但不会更多。

    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);

我真的需要那些奶牛:)

谢谢

1 个答案:

答案 0 :(得分:1)

我们没有使用cogroup。 我们创建了一个包含每个列表的superObject。

对于5个RDD中的每一个:

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

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