现在我有两个rdds,第一个是这样的
1,2
3,4
5,6
而另一个是这样的
7,8
9,10
11,12
现在我想把这两个rd这样联合起来
1,2,7,8
3,4,9,10
5,6,11,12
我该怎么做? rdd.union无法获得此结果
答案 0 :(得分:2)
如果您可以保证两个RDD具有相同数量的元素和分区,则可以使用rdd.zip
获得所需的结果,然后重新整形结果对:
rdd1.zip(rdd2).map{case ((a1,a2),(b1,b2))=> (a1,a2,b1,b2)}
如果两个RDD的元素或分区数量不同,则需要一些密钥才能加入它们。索引它们的效率不是很高,但是可以达到目的,尽管特定领域的解决方案(如果存在)会更好:
val indexed1 = rdd1.zipWithIndex.map(tuple => tuple.swap)
val indexed2 = rdd2.zipWithIndex.map(tuple => tuple.swap)
val joined = indexed1.join(indexed2)
val result = joined.map{case (k,((a1,a2),(b1,b2))) => (a1,a2,b1,b2)}