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

如何在PySpark中将长格式DataFrame转换为宽格式?

用PySpark实现长格式DataFrame转宽格式

要把你的长格式DataFrame转换成目标宽格式,直接用PySpark的groupBy+pivot组合即可,这是处理行列转换的标准方案,具体实现如下:

完整代码示例

假设你的长格式DataFrame名为long_df,执行以下代码:

from pyspark.sql.functions import first

# 行列转换核心逻辑
wide_df = long_df.groupBy("KPI", "GROUP")\
                 .pivot("TIME")\
                 .agg(first("VALUE"))\
                 .withColumnRenamed("Before", "BEFORE")\
                 .withColumnRenamed("After", "AFTER")

# 查看结果
wide_df.show()

代码解释

  • groupBy("KPI", "GROUP"):指定转换后每行的唯一标识列,确保相同KPI+GROUP的记录会被合并到同一行
  • pivot("TIME"):将TIME列的不同取值(Before/After)转换为新的列名
  • agg(first("VALUE")):由于每个(KPI,GROUP,TIME)组合仅对应一个VALUE,用first提取唯一值;如果存在重复记录,可根据业务需求替换为sum、avg等聚合函数
  • withColumnRenamed:将自动生成的小写列名改为大写的BEFORE/AFTER,匹配目标格式

性能优化提示

如果TIME列的可选值是固定的(比如只有Before和After),可以在pivot中明确指定取值列表,避免Spark全表扫描枚举取值,提升处理效率:

wide_df = long_df.groupBy("KPI", "GROUP")\
                 .pivot("TIME", ["Before", "After"])\
                 .agg(first("VALUE"))\
                 .withColumnRenamed("Before", "BEFORE")\
                 .withColumnRenamed("After", "AFTER")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:25:26