Я пытаюсь создать новый столбец списков в Pyspark, используя агрегацию groupby в существующем наборе столбцов. Примерный входной фрейм данных приведен ниже:
------------------------
id | date | value
------------------------
1 |2014-01-03 | 10
1 |2014-01-04 | 5
1 |2014-01-05 | 15
1 |2014-01-06 | 20
2 |2014-02-10 | 100
2 |2014-03-11 | 500
2 |2014-04-15 | 1500
Ожидаемый результат:
id | value_list
------------------------
1 | [10, 5, 15, 20]
2 | [100, 500, 1500]
Значения в списке сортируются по дате.
Я попытался использовать collect_list следующим образом:
from pyspark.sql import functions as F
ordered_df = input_df.orderBy(['id','date'],ascending = True)
grouped_df = ordered_df.groupby("id").agg(F.collect_list("value"))
Но collect_list не гарантирует порядок, даже если я сортирую кадр входных данных по дате перед агрегацией.
Может ли кто-нибудь помочь в том, как сделать агрегацию, сохраняя заказ на основе второй (даты) переменной?