请说明在 PySpark 中,如何利用 groupBy() 与 agg() 这两个方法完成数据聚合任务?
考察说明
考查对 PySpark 聚合操作核心 API 的理解与使用能力。
回答思路
- 【回答框架 1】groupBy() 用于按一个或多个列对 DataFrame 进行分组,返回 GroupedData 对象,该对象本身不执行计算,只定义分组逻辑。
- 【回答框架 2】agg() 是 GroupedData 的方法,用于对分组后的数据应用一个或多个聚合函数,如 sum、avg、count、max、min 等,可传入字典或列表达式。
- 【回答框架 3】典型用法:df.groupBy('列名').agg({'列名':'sum'}) 或 df.groupBy('列名').agg(sum('列名').alias('总和')),支持多列和多聚合。
- 【回答框架 4】聚合函数也可直接作用于分组后的列,如 df.groupBy('列名').sum('数值列'),但 agg() 更灵活,可混合多种聚合。
- 【回答框架 5】注意分组列会作为结果列保留,聚合结果列名默认与函数相关,可通过 alias 重命名。
- 【关键点 1】groupBy() 返回 GroupedData,不触发计算。
- 【关键点 2】agg() 接受字典或列表达式,支持多聚合。
- 【关键点 3】聚合函数包括 sum、avg、count、max、min 等。
- 【关键点 4】分组列自动出现在结果中。
- 【关键点 5】可用 alias 自定义聚合列名。
- 【易错点 1】不要混淆 groupBy() 与 agg() 的调用顺序,agg() 必须作用于 GroupedData。
- 【易错点 2】聚合函数名与列名冲突时需使用列表达式避免歧义。
- 【易错点 3】对空分组或 null 值,聚合结果可能为 null,需注意处理。