2017-05-23 37 views
5

Geçtiğimiz günlerde verileri keyValue Pair'da saklamak için bir senaryo oluşturdum ve reduceByKey(_ ++ _) işlevine rastladım. Bu, daha çok kısa sözdizimi. Bunun aslında ne anlama geldiğini anlayamıyorum.ByKey için anlamı nedir (_ ++ _)

Örnek: reduceBykey(_ + _) Böylece reduceByKey((a,b)=>(a+b))

reduceByKey(_ ++ _) araçlar anlamına gelir ??

reduceByKey(_ ++ _) kullanarak anahtar değer çiftini veri oluşturamıyorum.

val y = sc.textFile("file:///root/My_Spark_learning/reduced.txt") 

y.map(value=>value.split(",")) 
    .map(value=>(value(0),value(1),value(2))) 
    .collect 
    .foreach(println) 

(1,2,3) 
(1,3,4) 
(4,5,6) 
(7,8,9) 

y.map(value=>value.split(",")) 
    .map(value=>(value(0),Seq(value(1),value(2)))) 
    .reduceByKey(_ ++ _) 
    .collect 
    .foreach(println) 

(1,List(2, 3, 3, 4)) 
(4,List(5, 6)) 
(7,List(8, 9)) 

cevap

4

reduceByKey(_ ++ _)reduceByKey((a,b) => a ++ b) çevirir.

++, List üzerinde tanımlanmış olan başka bir listeyi tamamlayan bir method'dir.

Böylece, örnek veri 1 anahtar için, aList(2,3) olacak ve bList(3,4) olacak ve bu nedenle List(2,3) ve List(3,4) (List(2,3) ++ List(3,4)) birleştirilmesi List(2,3,3,4) verecektir.

+0

Açıklama için teşekkürler. –

1

reduceByKey(_ ++ _)reduceByKey((x,y)=> x ++ y) reduceByKey eşdeğerdir bir işlevi uygulamak, iki parametre alır ve bir dizi kasalar ve ++ sadece iki seti unsurlarını birleştirerek birlikte koleksiyonlarını ekler İlk başta

döndürür.

Her tuş için listeye eklemeye devam eder. 1 sizin halinde kilit x List(2,3) olacak şekilde ve (1,4,5) gibi başka değeri olsaydı y List (3,4) ve ++ sonra x bu durumda List(4,5) olacağını List (2,3,3,4)

olarak hem katacak edecek ve y List (2,3,3,4) olmalı ve neden List(2,3,3,4,4,5)