2014-11-13 17 views
17

iki RDDs birleştirmek için kullanılır.bize aşağıdaki anahtar çifti değerlerle aşağıdaki iki RDDs var diyelim tuşları

rdd1 = [ (key1, [value1, value2]), (key2, [value3, value4]) ] 

ve Şimdi

rdd2 = [ (key1, [value5, value6]), (key2, [value7]) ] 

, ben mesela ben bunu nasıl takip

ret = [ (key1, [value1, value2, value5, value6]), (key2, [value3, value4, value7]) ] 

dönmek istiyorum bu yüzden de, anahtar değerleriyle onlara katılmak istiyorum Python veya Scala kullanarak kıvılcım mı? Bir yol, birleştirme kullanmaktır, ancak birleştirme, tuple içinde bir tuple yaratacaktır. Ama sadece anahtar değer çifti başına bir tuple sahip olmak istiyorum.

cevap

7

Sendika iki RDDs ve reduceByKey değerleri birleştirmek olacaktır.

(rdd1 union rdd2).reduceByKey(_ ++ _) 
+0

Çalışmıyor. 'sendika' bilinmemektedir. – nottinhill

+0

@SirBenBenji Muhtemelen anlamına rdd1.union (rdd2)? – Sai

+0

@Sai Aynı şey, değil mi? Emin değilim "bulunamadı" ile – maasg

7

Sadece join kullanmak ve daha sonra map çıkan RDD.

rdd1.join(rdd2).map(case (k, (ls, rs)) => (k, ls ++ rs)) 
+0

Toplam rdd sayısı ve rdd sayım var. Bir ortalama oluşturmak için onlara aynı tuşlarla nasıl katılırım? Açık yapmak için yanlış yapıyorum. –

+1

Bu ayrı bir soru olmalı, ama: Eğer 'değerleri varsa:' RDD [(K, Float)] 've sayıları: RDD [(K, Int)]' (onlar değilseniz bu şekle onları map) o zaman ', bir' RDD [(K, (Float, Int))] 'almak' K' uzak map' için '' values.join (sayımları) yapabilir ve sonra ortalama yapabilirsiniz - bir orada muhtemelen Bu zaten işlev, ancak sabit bir yol() (v1, say1, (v2 say2)) durum {=> ((v1 * say1 2 + v * say2)/(say1 + say2), (say1 + COUNT2 azaltmak 'dır))} 'matematiklerimin doğru olduğunu varsayarak. – lmm

+0

Evet, bu çözüm olmaktan çıktı. Teşekkürler! –