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

PySpark如何对DataFrame的每一列应用多个函数?

解决Spark DataFrame多列同时计算min和max的问题

你的代码出错的原因是:对同一列的min()和max()聚合结果使用了相同的列别名,导致列名重复,Spark无法正常处理。下面是两种能实现你需求的可行方案:

方案一:分别计算后合并(直观易理解)

from pyspark.sql import functions as F

# 计算各列最小值,生成单独的行
min_row = df.agg(*[F.min(c).alias(c) for c in df.columns])
# 计算各列最大值,生成单独的行
max_row = df.agg(*[F.max(c).alias(c) for c in df.columns])
# 合并两行,得到目标结果
result_df = min_row.union(max_row)

方案二:单次聚合后重构结果(效率更高)

from pyspark.sql import functions as F

# 对所有列同时执行min和max聚合,得到带多级列的结果
agg_result = df.agg({col: ["min", "max"] for col in df.columns})

# 提取min和max的值,构造新的DataFrame
min_vals = [agg_result.select(f"`{col}`.min").first()[0] for col in df.columns]
max_vals = [agg_result.select(f"`{col}`.max").first()[0] for col in df.columns]
result_df = spark.createDataFrame([min_vals, max_vals], schema=df.columns)

两种方案最终都会生成你期望的结构:第一行是各列最小值,第二行是各列最大值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 16:27:27