我的输入文件在
下面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))
如何对其进行类型转换。
答案 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)