私はHolden Karauによって "Spark With Fast Process"という本から次の例を見つけました。私は、次のコード行は、プログラムの中で何をするか分かりませんでした:マップ関数の操作の理解
val splitLines = inFile.map(line => {
val reader = new CSVReader(new StringReader(line))
reader.readNext()
})
val numericData = splitLines.map(line => line.map(_.toDouble))
val summedData = numericData.map(row => row.sum)
プログラムは次のとおりです。
package pandaspark.examples
import spark.SparkContext
import spark.SparkContext._
import spark.SparkFiles;
import au.com.bytecode.opencsv.CSVReader
import java.io.StringReader
object LoadCsvExample {
def main(args: Array[String]) {
if (args.length != 2) {
System.err.println("Usage: LoadCsvExample <master>
<inputfile>")
System.exit(1)
}
val master = args(0)
val inputFile = args(1)
val sc = new SparkContext(master, "Load CSV Example",
System.getenv("SPARK_HOME"),
Seq(System.getenv("JARS")))
sc.addFile(inputFile)
val inFile = sc.textFile(inputFile)
val splitLines = inFile.map(line => {
val reader = new CSVReader(new StringReader(line))
reader.readNext()
})
val numericData = splitLines.map(line => line.map(_.toDouble))
val summedData = numericData.map(row => row.sum)
println(summedData.collect().mkString(","))
}
}
私は、上記に簡単にプログラムの機能を知っています。それは入力 CSVを解析し、すべての行を合計します。しかし、これら3行のコードがどの程度正確に達成できるかは、私が理解できないものです。
また、これらの行がflatMapに置き換えられた場合、どのように出力が変化するか説明できますか? Like:
あなたはどのようにでしょう出力変化を教えてもらえ同様:? valの分割線= inFile.flatMap(ライン=> {valのリーダー=新しいCSVReaderを(新しいStringReader(行))reader.readNext()}) 数値numericData = splitLines.flatMap(行=> line.map(_。toDouble)) val summedData = numericData.map(行=> row.sum) – Annapurna
flatMapは常に内部ラッパーを削除します。ここでは の配列(配列(10.0、12.0、13.0)、配列(1.0,2.0,3.0,4.0)、配列(1.0,2.0)) のような応答を得ていますが、代わりにflatMapを適用すると、ように - 配列(10.0,12.0,13.0,1.0,2.0,3.0,4.0,1.0,2.0) ここで見ることができるflatMapのbeacuseすべての内部ラッパーが削除されました –