Spark Scala中如何对RDD按name列分组并统计views列求和?
按name分组求views总和的Spark Scala实现方案
嘿,刚上手Spark Scala的话,这个需求其实很好实现,我给你一步步拆解:
核心思路
我们需要把RDD里的每一行数据转换成**(name, views数值)**的键值对,然后通过reduceByKey操作对相同name的views值进行累加求和。
完整代码示例
假设你的原始RDD名为rawRDD(比如通过sc.textFile("你的文件路径")加载而来),代码如下:
// 加载数据(如果还没加载的话) val rawRDD = sc.textFile("path/to/your/data.txt") // 转换为键值对并分组求和 val resultRDD = rawRDD .map(line => { // 按空格拆分每行数据,得到四个字段的数组 val parts = line.split(" ") // 提取name作为key,views转成Int作为value (parts(0), parts(2).toInt) }) // 对相同key的value进行累加 .reduceByKey(_ + _) // 查看结果(可以用collect()拿到所有结果,或者foreach打印) resultRDD.foreach(println)
代码解释
split(" "):把每行数据按空格拆分成数组,对应你说的4列:parts(0)是name,parts(2)是views。map(...):将每行数据映射成键值对,把views从字符串转成整数,方便后续求和。reduceByKey(_ + _):这是Spark RDD的核心分组聚合操作,会自动把相同name的所有views值加起来,得到每个name的总views数。
输出结果
运行后你会得到符合预期的输出(顺便提一句,你给的示例里af对应的views是2+2=4,你期望输出写的2应该是笔误啦😉):
aa 3 aa.b 2 af 4 en 1
内容的提问来源于stack exchange,提问作者Jeet Banerjee
相关产品推荐
相关产品推荐

