Pyspark动态列Pivot需求:补全缺失季度并按倒序排列
PySpark DataFrame Pivot 处理缺失季度并按指定顺序排列
要实现填充缺失季度为null、季度按最新到最旧顺序排列的pivot操作,对原代码做两处关键调整即可:
- 提前生成按倒序排列的季度列表,指定给pivot操作
- 利用pivot的values参数强制列顺序并自动填充缺失值
步骤1:生成排序后的季度列表
先提取数据中所有唯一的季度值,按从新到旧的顺序排序:
from pyspark.sql import functions as F # 获取所有唯一季度值并倒序排序 sorted_quarters = sorted( df.select("T").distinct().rdd.flatMap(lambda x: x).collect(), reverse=True )
如果季度格式为yyyyqN(如2023q4),直接用字符串倒序排序就能得到正确的时间顺序。
步骤2:带指定顺序的Pivot操作
将排序后的季度列表传入pivot的第二个参数(values),Spark会按该顺序生成列,缺失的季度自动填充null:
FinalDF = df.groupBy("id", "month").pivot("T", sorted_quarters).agg( F.first("Oil"), F.first("Gas") )
关键说明
- 指定
pivot("T", sorted_quarters)后,输出DataFrame的列会严格遵循sorted_quarters的顺序,不会默认按升序排列 - 列表中存在但原数据缺失的季度对应的列值会自动填充为null,无需额外处理
内容的提问来源于stack exchange,提问作者code_bug
相关产品推荐
相关产品推荐

