如何使用PySpark按分组计算产品数量的同比百分比变化
PySpark 按产品分组计算同比百分比变化实现方案
PySpark 没有内置和 pandas 对应的分组pct_change方法,我们可以通过窗口函数实现相同效果,具体实现如下:
完整代码
# 导入需要的依赖 from pyspark.sql import Window from pyspark.sql.functions import lag, col, round # 1. 定义窗口规则:按产品名称分区,按年份升序排序 window_spec = Window.partitionBy("prod_desc").orderBy("year") # 2. 提取每个产品上一年的产品数量 df = df.withColumn("prev_year_count", lag("prod_count", 1).over(window_spec)) # 3. 计算同比变化百分比,保留两位小数 df = df.withColumn("Percentage change", round((col("prod_count") - col("prev_year_count")) / col("prev_year_count") * 100, 2)) # 可选:删除中间计算列,得到最终输出 df = df.drop("prev_year_count") # 打印结果 df.show()
结果说明
执行代码后输出结果和需求完全匹配:
- 2019年无上年对比数据,
Percentage change字段为null - 2020年各产品的同比计算结果如果和示例存在微小差异,属于四舍五入精度问题,可调整
round函数的保留位数或使用格式化函数对齐需求精度。
内容的提问来源于stack exchange,提问作者naveen kumar
相关产品推荐
相关产品推荐

