如何解决在SparkSQL中每年和每月进行累计
输入:
item loc qty year month
A IND 10 2019 13
A IND 20 2020 1
A IND 10 2020 2
A IND 40 2020 3
A IND 50 2020 5
A IND 10 2020 6
输出:
item loc sum(qty) year month
A IND 0 2019 13
A IND 10 2020 1
A IND 30 2020 2
A IND 40 2020 3
A IND 50 2020 5
A IND 90 2020 6
说明:
我将如何获得输出,如下所示:
如果我要计算2020年和第3个月的总和,那么我需要考虑(第3个月)和(第1个月)之间的总和(即这种情况)是从2019年第12个月到2020年和第二个月
因此对于2020年和第3个月,输出将为sum(qty)= 10 + 20 + 10 = 40
现在为2020年和第6个月
总和(qty)将在2020年和-3 = 3个月到2020年和-1 = 5个月之间
所以sum(qty)= 0(第4个月的0(不在表中))+ 40 + 50 = 90
解决方法
尝试一下。
df.createOrReplaceTempView("test")
spark.sql("""
SELECT
item,loc,COALESCE(
SUM(qty) OVER (
PARTITION BY item
ORDER BY (year - 2000) * 13 + month
RANGE BETWEEN 3 PRECEDING AND 1 PRECEDING
),0) as sum_qty,year,month
FROM
test
""").show
+----+---+-------+----+-----+
|item|loc|sum_qty|year|month|
+----+---+-------+----+-----+
| A|IND| 0|2019| 13|
| A|IND| 10|2020| 1|
| A|IND| 30|2020| 2|
| A|IND| 40|2020| 3|
| A|IND| 50|2020| 5|
| A|IND| 90|2020| 6|
+----+---+-------+----+-----+
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。