2017-05-23 6 views
5

Kürzlich hatte ich Szenario, um die Daten in keyValue Pair zu speichern und stieß auf eine Funktion . Dies ist mehr von Kurzschriftsyntax. Ich verstehe nicht, was das eigentlich bedeutet.Was ist die Bedeutung für reduceByKey (_ ++ _)

Ex: reduceBykey(_ + _) bedeutet reduceByKey((a,b)=>(a+b))

So reduceByKey(_ ++ _) Mittel ??

Ich bin in der Lage, Schlüsselwertpaar aus Daten mit reduceByKey(_ ++ _) zu erstellen.

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)) 

Antwort

4

reduceByKey(_ ++ _) übersetzt reduceByKey((a,b) => a ++ b).

++ ist eine method definiert auf List, die eine andere Liste verkettet.

So zum Schlüssel 1 in den Probendaten, werden aList(2,3) und b wird List(3,4) und somit die Verkettung von List(2,3) und List(3,4) (List(2,3) ++ List(3,4)) würde List(2,3,3,4) ergeben.

+0

Danke für die Erklärung. –

1

reduceByKey(_ ++ _) entsprechen reduceByKey((x,y)=> x ++ y) reduceByKey hat zwei Parameter, eine Funktion anzuwenden und gibt

Beim ersten es einen Satz Kisten und ++ kommt noch hinzu, Sammlungen zusammen Elemente beiden Sätze kombiniert.

Für jeden Schlüssel Es hängt weiter in der Liste an. In Ihrem Fall von 1 als Schlüssel x wird List(2,3) und y wird List (3,4) und ++ sowohl hinzufügen als List (2,3,3,4)

Wenn Sie einen anderen Wert wie (1,4,5) hatte dann würde die x List(4,5) in diesem Fall sein und y sollte List (2,3,3,4) und führen sein wäre List(2,3,3,4,4,5)

Verwandte Themen