Нужна помощь в SQL-запросе pyspark со сложным требованием - PullRequest
0 голосов
/ 16 января 2019

Мне понадобилось 5 минут, чтобы придумать этот отстойный заголовок, так как проблема была очень сложной.

Введите:

field1  field2  field3
A   A1  50
A   A2  70
B   B1  30
B   B2  30
B   B3  30
C   C1  45
C   C2  55
D   D1  80
D   D2  40
D   D3  50

Ожидаемый результат:

field1  field2  field3  field4  field5
A   A1  50  50  0
A   A2  70  50  20
B   B1  30  30  0
B   B2  30  30  0
B   B3  30  30  0
C   C1  45  45  0
C   C2  55  55  0
D   D1  80  80  0
D   D2  40  20  20
D   D3  50  0   50

Логика: field1 - ключевой столбец, по которому необходимо выполнить группировку.
Для каждой группы максимум 100 может быть распределен в field4 на основе field3.
Как только он проходит 100, остальные переходят к field5.

Например: Группа с полем1 «А», поле 1-й строки3 - 50. Из 100 все 50 переходит в поле4. 2-й строке группы - 70, и от первоначальных 100 осталось только 50. Таким образом, 50 переходит в поле 4, а оставшиеся 20 переходит в поле 5. Есть ли способ получить логику чисто в pyspark-sql?

...