Итак, у меня есть фреймворк pyspark, организованный следующим образом:
ID | timestamp | value1 | value2 |
---|---|---|---|
1 | 1 | a | x |
2 | 1 | a | y |
1 | 2 | b | x |
2 | 2 | b | y |
1 | 3 | c | y |
2 | 3 | d | y |
1 | 4 | l | y |
2 | 4 | s | y |
и предположим, что метка времени — это номер дня от начала времени. Я бы хотел для каждой строки сгруппировать в список значения до -x дней относительно текущего идентификатора, чтобы иметь:
ID | timestamp | value1 | value2 | list_value_1 |
---|---|---|---|---|
1 | 1 | a | X | a |
2 | 1 | a | y | a |
1 | 2 | b | x | a,b |
2 | 2 | b | y | a,b |
1 | 3 | c | y | a,b,c |
2 | 3 | d | y | a,b,d |
1 | 3 | c | y | b,c,l |
2 | 3 | d | y | b,d,s |
Я полагаю, что должен сделать это с помощью Window, но я не уверен, что делать дальше (я по какой-то причине плохо разбираюсь в Windows).
Вы можете сделать
collect_list
над Window между текущей строкой и двумя предыдущими строками и объединить список в строку, разделенную запятыми, используяconcat_ws
:Большое спасибо, преобразование запятой не нужно, так как они мне нужны только в виде списка. Мне пришлось удалить обычное соглашение об использовании [el1, el2, …], потому что по какой-то причине возникли проблемы с переполнением стека в таблице — person Tsadoq; 18.05.2021
тогда вы можете удалить часть кода concat_ws — person Tsadoq; 18.05.2021
Да, сделал это, я только хотел добавить это для других возможных читателей — person Tsadoq; 18.05.2021