Мне понадобилось 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?