Apache Spark 中窗口函数中的过滤器和条件
Posted
技术标签:
【中文标题】Apache Spark 中窗口函数中的过滤器和条件【英文标题】:Filters and conditions in window functions in Apache Spark 【发布时间】:2020-01-15 12:52:39 【问题描述】:我有一个如下示例数据集
Name date Category transactionamount
Adam 1/1/2020 Mobile 100
Adam 1/1/2020 Tab 200
Bob 1/1/2020 Mobile 200
Adam 2/1/2020 Tab 200
Bob 2/1/2020 Mobile 200
Adam 3/1/2020 Tab 200
Bob 4/1/2020 Mobile 200
我想在当前和前一天的滚动期间对 transactionamount 列求和,所以我的窗口框架代码如下所示
val windowspec = Window.partitionBy($"name").orderBy($"date".asc)
val range = windowspec.rangeBetween(-1, 0)
val aasum2 = sum('transactionAmount).over(range)
df.select('date,'name,aasum2 as 'aasum).orderBy('date,'name).show(100,false)
这适用于无条件的一般求和。
但我想要如下表所示的输出,其中包含基于类别列值的两个新列。
每个输出行都应包含不同日期和名称的总和值。
我们如何在对列执行窗口函数时应用条件(基于其他列的值)
date Name Mobile_sum Tab_sum
1/1/2020 Adam 100 200
1/1/2020 Bob 200 0
2/1/2020 Adam 0 400
2/1/2020 Bob 400 0
3/1/2020 Adam 0 600
3/1/2020 Bob 0 0
4/1/2020 Adam 0 0
4/1/2020 Bob 200 0
【问题讨论】:
【参考方案1】:在您的WindowSpec
中将您的附加列添加到您的partitionBy()
【讨论】:
以上是关于Apache Spark 中窗口函数中的过滤器和条件的主要内容,如果未能解决你的问题,请参考以下文章
在 Apache Spark SQL 中将中值作为窗口函数 (UDAF) 移动