2015-03-31 46 views
-2

现在我有两个RDDS,第一个是这样的如何工会2个RDDS

1,2

3,4

5,6

,另一种是像这

7,8

9,10

11,12

现在我想联盟这两个RDDS这样

1,2,7,8

3,4,9,10

5,6,11 ,12

我该怎么做? rdd.union无法获得此结果

+0

如果你解释'rdd'和粘贴一些代码,这将是更好这里。 – 2015-03-31 12:57:41

回答

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)} 
+0

谢谢你的回答 – 2015-04-01 11:13:20