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

