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

如何在PySpark中按年份透视并计算所有金额总和?

在PySpark中实现按年份透视并计算金额总和

要实现你需要的透视聚合效果,可以通过提取年份 + 分组透视求和两步完成,以下是具体操作:

步骤1:从日期字段提取年份

首先将原数据中的日期字段转换为日期类型(若尚未转换),并提取年份作为单独列:

from pyspark.sql.functions import year, col

# 假设原DataFrame名为df,日期字段名为date
df = df.withColumn("year", year(col("date")))

如果你的日期字段是字符串格式(比如"2020-01-05"),需要先转换为日期类型:

from pyspark.sql.functions import to_date

df = df.withColumn("date", to_date(col("date"), "yyyy-MM-dd"))
       .withColumn("year", year(col("date")))

步骤2:分组透视并计算金额总和

使用groupBy指定透视后的行维度(比如你数据中对应输出行的分类字段,假设为category),通过pivot将年份转为列,最后用sum聚合金额:

# 基础写法,年份会自动从数据中提取并转为列
pivoted_df = df.groupBy("category")
               .pivot("year")
               .sum("amount")

# 若需要固定年份列的顺序,可传入指定年份列表
target_years = [2020, 2021, 2022]  # 替换为你的数据实际包含的年份
pivoted_df = df.groupBy("category")
               .pivot("year", target_years)
               .sum("amount")

查看结果

执行show()即可得到目标宽表格式:

pivoted_df.show()

核心逻辑说明

  • groupBy("category"):指定按category分组,对应输出中的每一行
  • pivot("year"):将year字段的不同取值转换为表格的列
  • sum("amount"):对每个「分组+年份」组合的金额求和,填充到对应单元格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:50:54