2017-05-14 14 views

cevap

25

ikisini de kullanmak yaygın ve önemli olan, beni bunları netleştirmek için yardım edelim!

def join[W](other: RDD[(K, W)]): RDD[(K, (V, W))] 

Bu dikkatle bakmak lütfen birleşim prototype olduğunu. Örneğin, nihai sonuç görünecektir

val rdd1 = sc.makeRDD(Array(("A","1"),("B","2"),("C","3")),2) 
val rdd2 = sc.makeRDD(Array(("A","a"),("C","c"),("D","d")),2) 

scala> rdd1.join(rdd2).collect 
res0: Array[(String, (String, String))] = Array((A,(1,a)), (C,(3,c))) 

Tüm anahtarlar rdd1 ve rdd2 yaygındır. Bu relation database operation INNER JOIN'a benzer. İki rdds birini görünür en azından bir anahtar, nihai sonuca görüneceği şekilde

Ama cogroup farklı olduğunu

def cogroup[W](other: RDD[(K, W)]): RDD[(K, (Iterable[V], Iterable[W]))] 

, bana açıklamak bakalım:

val rdd1 = sc.makeRDD(Array(("A","1"),("B","2"),("C","3")),2) 
val rdd2 = sc.makeRDD(Array(("A","a"),("C","c"),("D","d")),2) 

scala> var rdd3 = rdd1.cogroup(rdd2).collect 
res0: Array[(String, (Iterable[String], Iterable[String]))] = Array(
(B,(CompactBuffer(2),CompactBuffer())), 
(D,(CompactBuffer(),CompactBuffer(d))), 
(A,(CompactBuffer(1),CompactBuffer(a))), 
(C,(CompactBuffer(3),CompactBuffer(c))) 
) 

Bu, için relation database operation FULL OUTER JOIN, ancak kayıt başına satır başına sonucu düzleştirmek yerine, için interable interface verecektir, Aşağıdaki işlem, uygun olarak size kadar olduğunu!

İyi Şanslar!

Kıvılcım dokümanlar geçerli:

+0

http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.rdd.PairRDDFunctions Nasıl 'toplamak ı kullandığınızda gibi büyük veri setleri için' cogroup' kullanmak() 'bellek istisna' rdd1 = rdd2.cogroup (rdd3) .collect' dışına atar. Bu konuda yardımcı olabilir misiniz [https://stackoverflow.com/questions/47180307/how-to-use-cogroup-for-large-datasets].Teşekkür ederiz – Vignesh

+0

@Vignesh, toplamak yerine yöntemini kullanın lütfen. – ashburshui

+0

yh, 'al, topla' denediniz, aşağıdaki kodu nasıl değiştireceğinizi biliyorsunuz – Vignesh

İlgili konular