Этот вопрос относится к моему предыдущему вопросу. Фрейм данных pyspark объединяет столбец по скользящему временному окну Но я хотел бы создать сообщение, чтобы уточнить некоторые ключевые моменты, которые отсутствуют в моем предыдущем вопросе.
the original dataframe:
client_id value1 name1 a_date
dhd 561 ecdu 2019-10-8
dhd 561 tygp 2019-10-8
dhd 561 rdsr 2019-10-8
dhd 561 rgvd 2019-8-12
dhd 561 bhnd 2019-8-12
dhd 561 prti 2019-8-12
dhd 561 teuq 2019-5-7
dhd 561 wnva 2019-5-7
dhd 561 pqhn 2019-5-7
Мне нужно чтобы найти агрегированные значения «name1» для каждого «client_id», каждого «value1» и для некоторого заданного скользящего временного окна.
Вызывается указанное время windows:
last_0_month last_1_month last_2_month last_5_month last_8_month last_12_month
Здесь «last_x_month» означает, что временное окно начинается с месяца в «a_date» и выполняет возврат в течение «x» месяцев и накапливает значения «name1» для временного окна. Если есть месяц разрыва, в котором нет данных за этот месяц, просто пропустите его.
Для приведенного выше примера мне нужно:
client_id value1 start_date last_0_month last_1_month last_2_month
dhd 561 2019-10-8 [ecdu,tygp,rdsr] [ecdu,tygp,rdsr] [ecdu,tygp,rdsr, rgvd,bhnd,prti]
last_5_month
[ecdu,tygp,rdsr, rgvd,bhnd,prti, teuq, wnva,pqhn ]
last_8_month
[ecdu,tygp,rdsr, rgvd,bhnd,prti, teuq, wnva,pqhn]
last_12_month
[ecdu,tygp,rdsr, rgvd,bhnd,prti, teuq, wnva,pqhn ]
Из ожидаемого результата, Вы можете видеть, что для клиента "dhd" существуют промежутки между 2019-10 и 2018-10 в данном кадре данных. например, 2019-9 недоступен в кадре данных.
Таким образом, "last_0_month" (2019-10) и "last_1_month" (2019-10 и 2019-9) имеют одинаковые накопленные данные для "name1" и т. д. для других месяцев разрыва.
Существует около 10 миллионов различных значений «client_id» и 10 различных значений «value1» и около 1000 значений «name1».
И, есть только одно значение "name1" для того же "client_id", "value1" в каждом году и месяце.
Мне нужно получить накопленные значения "name1" для каждого доступно "a_date".
Я не уверен, как спроектировать скользящее окно времени.
Спасибо