Spark代码应用SUM agg功能

时间:2016-05-25 09:52:44

标签: apache-spark

我的输入文件在

下面
surender,2015-JAN,100
raja,2015-JAN,20
kumar,2015-FEB,2
ajay,2015-FEB,23

我需要创建一个输出“找到每月花费的总金额”

预期输出

2015-JAN,120
2015-FEB,25

我在spark shell中尝试了以下代码

scala> val fileRDD = sc.textFile("/user/cloudera/records.txt")

scala> val mapRDD  = fileRDD.map(x => (x.split(",")(1),x.split(",")(2)))

scala> val reduceRDD = mapRDD.reduceByKey((a,b) => (a+b))

scala> reduceRDD.collect

我正在获得输出,但这不正确。 Concat操作适用于金额。

 res21: Array[(String, String)] = Array((2015-JAN,10020), (2015-FEB,223))

如何对其进行类型转换。

2 个答案:

答案 0 :(得分:2)

在地图的第二部分添加.toInt:

val mapRDD  = fileRDD.map(x => (x.split(",")(1),x.split(",")(2).toInt))

如果不这样做,它仍会将其视为字符串,现在它将添加整数。

答案 1 :(得分:1)

这是:

val fileRDD = sc.textFile("test.txt")
val mapRDD  = fileRDD.map(x => (x.split(",")(1),x.split(",")(2).toInt))
val reduceRDD = mapRDD.reduceByKey(_ + _)
reduceRDD.collect.foreach(println)