Фильтры и условия в оконных функциях в Apache Spark - PullRequest
0 голосов
/ 15 января 2020

У меня есть пример набора данных, как показано ниже

 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

1 Ответ

0 голосов
/ 16 января 2020

Добавьте ваш дополнительный столбец к вашему partitionBy() в пределах вашего WindowSpec

...