Java Spark中基于用户ID分组计算学生平均分的方法
嘿,作为Spark初学者,碰到这种分组聚合的需求太常见啦!我来帮你快速搞定按userId计算平均分的问题~
核心思路
要实现这个需求,只需要两步:
- 第一步:用
groupBy()方法按照userId对数据进行分组 - 第二步:对每个分组的
score列使用avg()聚合函数计算平均值,还可以给结果列起个更友好的别名
代码实现(分Python和Scala版本)
Python 版本
假设你的DataFrame名称是student_scores,代码如下:
from pyspark.sql.functions import avg # 分组计算平均分,并给结果列命名 avg_scores_df = student_scores.groupBy("userId").agg(avg("score").alias("average_score")) # 查看最终结果 avg_scores_df.show()
执行后你会得到类似这样的结果:
+------+-------------+ |userId|average_score| +------+-------------+ | 1| 71.0| | 2| 73.0| | 3| 63.0| | 4| 85.0| +------+-------------+
Scala 版本
如果是用Scala开发,代码逻辑是一致的:
import org.apache.spark.sql.functions.avg // 分组计算平均分 val avgScoresDF = studentScores.groupBy("userId").agg(avg("score").alias("average_score")) // 展示结果 avgScoresDF.show()
额外小技巧
如果需要控制平均分的小数位数,可以搭配round()函数使用,比如保留1位小数:
from pyspark.sql.functions import avg, round avg_scores_df = student_scores.groupBy("userId").agg(round(avg("score"), 1).alias("average_score"))
这样处理后,结果会更整洁哦!
内容的提问来源于stack exchange,提问作者W.Howe
相关产品推荐
相关产品推荐

