例子描述:java
【分組、計算】spa
主要爲兩部分,將同類的數據分組概括到一塊兒,並將分組後的數據進行簡單數學計算。
難點在於怎麼去理解groupBy和groupByKeyscala
原始數據
2010-05-04 12:50,10,10,10
2010-05-05 13:50,20,20,20
2010-05-06 14:50,30,30,30
2010-05-05 13:50,20,20,20
2010-05-06 14:50,30,30,30
2010-05-04 12:50,10,10,10
2010-05-04 11:50,10,10,10code
結果數據
2010-05-05 13:50,40,40,40
2010-05-04 12:50,20,20,20
2010-05-06 14:50,60,60,60
2010-05-04 11:50,10,10,10字符串
代碼片斷:get
/* 同類合併、計算 */ val source = Source.fromFile("E:test.txt").getLines.toArray val sourceRDD = sc.parallelize(source) /* spark單機讀取數據 */ sourceRDD .map { line => val lines = line.split(",") /* 拆分數據 */ (s"${lines(0)}", s"${lines(1)},${lines(2)},${lines(3)}") /* 找出一樣的數據爲K,須要進行計算的爲V,拼成map */ } .groupByKey .map { /* 分組,最重要的就是這,同類的數據分組到一塊兒,後面只須要計算V了 */ case (k, v) => var a, b, c = 0 /* 定義幾個存數據的變量,恩,這很java,通常scala中不多見到var */ v.foreach { /* 遍歷須要計算的V */ x => val r = x.split(",") /* 將V拆分 */ a += r(0).toInt /* 計算 */ b += r(1).toInt c += r(2).toInt } s"$k,$a,$b,$c" /* 拼字符串,返回數據 */ } .foreach(println)