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
相关产品推荐
相关产品推荐

