2015-03-31 23 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