spark 例子groupByKey分組計算
例子描述:
【分組、計算】
主要為兩部分,將同類的數據分組歸納到一起,並將分組后的數據進行簡單數學計算。
難點在於怎么去理解groupBy和groupByKey
原始數據
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,10
結果數據
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
代碼片段:
/* 同類合並、計算 */
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)