Scala Apache Spark中窗口函数中的过滤器和条件
我有一个如下的示例数据集Scala Apache Spark中窗口函数中的过滤器和条件,scala,apache-spark,apache-spark-sql,conditional-statements,window-functions,Scala,Apache Spark,Apache Spark Sql,Conditional Statements,Window Functions,我有一个如下的示例数据集 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
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
我想在当前和前一天的滚动期间对TransactionMount列求和,所以我的窗口框架代码如下所示
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
将附加列添加到
WindowSpec中的partitionBy()