У меня есть некоторые данные, которые я хочу сгруппировать по определенному столбцу, а затем агрегировать серию полей на основе скользящего временного окна из группы.Как заполнить окно времени прокатки с группами в Spark
Вот несколько примеров данных:
df = spark.createDataFrame([Row(date='2016-01-01', group_by='group1', get_avg=5, get_first=1),
Row(date='2016-01-10', group_by='group1', get_avg=5, get_first=2),
Row(date='2016-02-01', group_by='group2', get_avg=10, get_first=3),
Row(date='2016-02-28', group_by='group2', get_avg=20, get_first=3),
Row(date='2016-02-29', group_by='group2', get_avg=30, get_first=3),
Row(date='2016-04-02', group_by='group2', get_avg=8, get_first=4)])
Я хочу группе group_by
, а затем создать временные окна, которые начинаются в кратчайшие сроки и продлить до тех пор, пока 30 дней без каких-либо записи для этой группы. По истечении этих 30 дней следующее окно времени начнется с даты следующей строки, которая не попала в предыдущее окно.
Затем я хочу объединить, например, получить среднее значение get_avg
и первый результат get_first
.
Так выход для этого примера должно быть:
group_by first date of window get_avg get_first
group1 2016-01-01 5 1
group2 2016-02-01 20 3
group2 2016-04-02 8 4
редактировать: жаль, что я понял, что мой вопрос не был задан правильно. Я действительно хочу окно, которое заканчивается через 30 дней бездействия. Я соответствующим образом изменил часть2 группы.