加入Apache Spark

时间:2017-01-08 12:20:33

标签: scala apache-spark rdd

这是已经被问到的问题,但我无法正确理解答案。

我有两个具有相同列数和相同记录数的RDD

RDD1(col1,col2,col3)

RDD2(colA,colB,colC)

我需要加入以下内容:

RDD_FINAL(col1,col2,col3,colA,colB,colC)

没有key来执行记录之间的连接,但它们是有序的,这意味着RDD1的第一条记录对应于RDD2的第一条记录。

2 个答案:

答案 0 :(得分:1)

为Alfilercio的示例添加代码段。

JavaRDD<col1,col2,col3> rdd1 = ...
JavaPairRDD<Long, Tuple3<col1,col2,col3>> pairRdd1 = rdd1.zipWithUniqueId().mapToPair(pair -> new Tuple2<>(pair._2(),pair._1());

JavaRDD<colA,colB,colC> rdd2 = ...
JavaPairRDD<Long, Tuple3<colA,colB,colC>> pairRdd2 = rdd2.zipWithUniqueId().mapToPair(pair -> new Tuple2<>(pair._2(),pair._1());

JavaRDD<Tuple2<Tuple3<col1, col2, col3>, Tuple3<colA,colB,colC>>> mappedRdd = pairRdd1.join(pairRdd2).map(pair -> pair._2());

答案 1 :(得分:0)

您可以使用zipWithIndex方法将行的索引添加为两个RDD的键,并通过键加入它。