2016-12-13 89 views
0

幫助,我有兩個RDD,我想合併到一個RDD.This是我的代碼。如何合併兩個RDD到一個RDD

val us1 = sc.parallelize(Array(("3L"), ("7L"),("5L"),("2L"))) 
val us2 = sc.parallelize(Array(("432L"), ("7123L"),("513L"),("1312L"))) 
+1

什麼是您的預期輸出和您嘗試過什麼? – mtoto

+0

3L 7L 5L 2L 432L 7123L 513L 1312L – Simon

+0

我想這RDD,是指兩個RDD合併成一個RDD – Simon

回答

2

只需使用工會:

val merged = us1.union(us2) 

文檔是here

Shotcut在Scala是:

val merged = us1 ++ us2 
+0

非常感謝你! – Simon

+0

@Simon [請上傳或接受答案,而不是離開謝謝你的評論] –

1

您需要RDD.union這些並不在鍵連接。聯盟本身並沒有真正做任何事情,所以它的開銷很低。請注意,組合的RDD將包含原始RDD的所有分區,因此您可能希望在聯合後合併。

val x = sc.parallelize(Seq((1, 3), (2, 4))) 
val y = sc.parallelize(Seq((3, 5), (4, 7))) 
val z = x.union(y) 
z.collect 
res0: Array[(Int, Int)] = Array((1,3), (2,4), (3,5), (4,7)) 

API

def++(other: RDD[T]): RDD[T] 

返回此RDD和另外一個聯盟。

def++ API

def union(other: RDD[T]): RDD[T] 

返回此RDD和另外一個聯盟。任何相同的元素將出現多次(使用.distinct()消除它們)。

def union API

+0

爲什麼你想在事後合併?如果兩個輸入RDD被正確分區,那麼聯合RDD也是如此。 – Tim

+0

只是爲了性能和更新分區。它不是強制性的,但可以完成。它返回一個新的RDD,該RDD被縮減爲numPartitions分區。 –

+0

對,我得到了什麼合併。但是如果您的分區在兩個輸入RDD中的大小都正確,那麼執行合併會產生太大的分區(尤其是如果您使用shuffle = false選項) – Tim

相關問題