-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无法获得此结果
现在我有两个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无法获得此结果
如果您可以担保两个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)}
谢谢你的回答 – 2015-04-01 11:13:20
如果你解释'rdd'和粘贴一些代码,这将是更好这里。 – 2015-03-31 12:57:41