У меня есть пример набора данных, как показано ниже
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
Я хочу суммировать столбец транзакции за период текущего и предыдущего дня, поэтому мой код для оконной рамы выглядит следующим образом:
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