-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