我有10年的数据(下面的KF)在下面的格式,我试图汇总每个部门的每个月的数据.2023年4月的数据快照(在下面的示例中)应该会给出SALEL_1作为2023年4月的SALE_AMT,SALE_2作为之前1个月或2023年3月的SALES_AMT,依此类推.对于没有值,我填充NULL. 为了从这10年的数据创建主表,我在10年中使用了下面的PySpark代码10次,但我不知道如何转置或垂直堆叠计算,以便如果有人查询我的结果,他们可以根据他们过滤的月份和年份获得快照.(例如)对于在PySpark中更高效地完成这项工作,有什么建议吗?蒂娅!
kf=main file with 10 years data
mf=kf.dropDuplicates(['dept_ID'])
gf=kf
month_list={'1','2','3','4','5','6','7','8','9','10','11','12'}
window = Winddow().partitionBy("dept_ID")
for i in month_list:
df = gf.filter(gf.month==i).withColumn("sale_"+i, sum(coalesce('sale_amt'), lit(0))).over(window))
df = df.dropDuplicates(['dept_ID'])
mf = mf.join(df, mf.dept_ID==df.dept_ID, 'left').drop(df.dept_ID)
kf:
dept_ID sale_amt sale_date sale_month sale_year
1 10 4/1/2023 4 2023
1 60 4/1/2023 4 2023
1 30 3/1/2023 3 2023
1 15 3/1/2023 3 2023
1 12 2/1/2023 2 2023
1 10 1/1/2023 1 2023
1 90 1/1/2023 1 2023
1 40 12/1/2022 12 2022
1 40 11/1/2022 11 2022
1 75 10/1/2022 10 2022
1 30 9/1/2022 9 2022
1 50 9/1/2022 9 2022
1 25 8/1/2022 8 2022
1 40 8/1/2022 8 2022
1 70 7/1/2022 7 2022
1 80 5/1/2022 5 2022
1 10 5/1/2022 5 2022
1 45 4/1/2022 4 2022
1 15 4/1/2022 4 2022
2 10 4/1/2023 4 2023
2 60 4/1/2023 4 2023
2 30 3/1/2023 3 2023
2 15 3/1/2023 3 2023
2 12 2/1/2023 2 2023
2 10 1/1/2023 1 2023
2 90 1/1/2023 1 2023
2 40 12/1/2022 12 2023
2 40 11/1/2022 11 2023
2 80 10/1/2022 10 2023
2 30 9/1/2022 9 2023
3 50 9/1/2022 9 2023
3 25 8/1/2022 8 2023
3 40 8/1/2022 8 2023
3 70 7/1/2022 7 2023
3 80 5/1/2022 5 2023
3 10 5/1/2022 5 2023
预期结果: