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

如何在多列场景下使用Group By与Sum且不重命名列

解决Spark分组求和后保留原列名的问题

方法1:动态生成聚合表达式(推荐,适配多列场景)

先筛选出除uid外的所有需要聚合的列,为每列生成sum(col).alias(col)的聚合表达式,再传入agg方法:

from pyspark.sql.functions import sum, col

# 获取非uid的列列表,生成带别名的sum表达式
agg_exprs = [sum(col(col_name)).alias(col_name) for col_name in df.columns if col_name != "uid"]
# 执行分组聚合
result_df = df.groupBy("uid").agg(*agg_exprs)

这种方式无需手动编写数百个列名,自动适配任意数量的列,执行后列名与原DataFrame完全一致。

方法2:对分组结果重命名列

如果已经执行了groupBy.sum(),可以通过字符串替换重命名列:

# 先执行默认分组求和
temp_df = df.groupBy("uid").sum()
# 批量重命名列:移除sum()包裹
new_col_names = ["uid"] + [col_name.replace("sum(", "").replace(")", "") for col_name in temp_df.columns if col_name != "uid"]
result_df = temp_df.toDF(*new_col_names)

注意:如果原列名包含括号,这种字符串替换会出错,因此方法1更稳妥。

测试结果验证

用你提供的示例数据执行上述方法后,输出结果如下:

uid sel_type1 sel_type2 sel_type3
123 2         1         1
100 0         1         2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:24:15