Spark Scala 如何修改代码实现RDD按唯一key对value求和?
问题原因
- 现有代码直接将整行文本作为分组键,固定值
1作为累加值,实际是统计完全重复的行的出现次数,不符合「按商品名分组、累加销售额」的需求
修改后代码
val salesRDD = sc.textFile("/user/bigdata/sales.txt") // 拆分每行,提取商品名作为key,销售额转整数作为value val pairs = salesRDD.map(s => { val arr = s.split(" ") (arr(0), arr(1).toInt) }) // 按商品分组,对销售额求和 val totalSales = pairs.reduceByKey(_ + _) // 按预期格式输出结果 totalSales.collect().foreach{case (good, amount) => println(s"$good $amount")}
代码说明
- 先用
split(" ")拆分每行文本,得到商品名和对应销售额两个部分 - 将销售额转为Int类型后作为键值对的value,商品名作为key
reduceByKey(_ + _)对同一个商品对应的所有销售额执行累加操作- 输出时通过模式匹配调整格式,和预期的输出结构完全匹配
内容的提问来源于stack exchange,提问作者Sammy Mak
相关产品推荐
相关产品推荐

