2016-05-01 17 views
4

I nicht mit scalaFunken Scala Legendes reduceByKey (_ + _)

object WordCount { 
def main(args: Array[String]): Unit = { 
val inputPath = args(0) 
val outputPath = args(1) 
val sc = new SparkContext() 
val lines = sc.textFile(inputPath) 
val wordCounts = lines.flatMap {line => line.split(" ")} 
.map(word => (word, 1)) 
.reduceByKey(_ + _) **I cant't understand this line** 
wordCounts.saveAsTextFile(outputPath) 
} 
} 

Antwort

9

Reduzieren nimmt zwei Elemente und erzeugen eine dritte nach der Anwendung einer Funktion reduceByKey (_ + _) in dem ersten Beispiel der Funken verstehen zu den zwei Parametern.

Der Code, den Sie entspricht dem folgenden

reduceByKey((x,y)=> x + y) 

definieren Dummy-Variablen Stattdessen gezeigt und eine Lambda schreiben, ist Scala intelligent genug, um herauszufinden, dass das, was Sie versuchen, erreichen bewirbt sich eine func (Summe in Dieser Fall) auf zwei beliebigen Parameter er empfängt und damit die Syntax

reduceByKey(_ + _) 
+1

vielen Dank – Elsayed

0

reduceByKey zwei Parameter nimmt, gilt eine Funktion und kehrt

reduceByKey (_ + _) entspricht reduceByKey ((x, y) => x + y)

Beispiel:

val numbers = Array(1, 2, 3, 4, 5) 
val sum = numbers.reduceLeft[Int](_+_) 

println("The sum of the numbers one through five is " + sum) 

Ergebnisse:

The sum of the numbers one through five is 15 
numbers: Array[Int] = Array(1, 2, 3, 4, 5) 
sum: Int = 15 

Same reduceByKey (_ + + _) entspricht reduceByKey ((x, y) => x ++ y)