You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark使用agg对同一列做多聚合时结果被覆盖如何解决

PySpark agg算子同列多聚合问题解决方案

问题根源

你传入agg的参数是Python字典,而Python字典的键具备唯一性,相同键的键值对会被后定义的覆盖,因此你写的两个date_time键对应的聚合规则,只会保留最后的min规则,所以看不到max的计算结果。

解决方法

不要使用字典传参的方式调用agg,改为显式传入pyspark.sql.functions下的聚合函数实例,可同时支持同一列的多个聚合操作,还支持自定义输出列名:

代码示例

首先导入依赖的函数:

from pyspark.sql import functions as F
from pyspark.sql.functions import to_timestamp

修改后的聚合代码:

table.select("date_time")\
    .withColumn("date", to_timestamp("date_time"))\
    .agg(
        F.max("date_time").alias("max_date_time"),
        F.min("date_time").alias("min_date_time"),
        # 如需对转换后的timestamp类型的date列做聚合,可继续添加规则
        F.max("date").alias("max_timestamp"),
        F.min("date").alias("min_timestamp")
    ).show()

补充说明

这种写法的灵活性更高,除了max、min外,count、avg、sum等所有聚合函数都可以用同样的方式传入,alias方法定义的列名更方便后续对聚合结果做进一步处理。

内容的提问来源于stack exchange,提问作者practicalGuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 22:18:00