У меня есть сценарий ETL, использующий Pandas, и чтобы сделать его более масштабируемым, я пытаюсь воссоздать его с помощью Pyspark. Пока все идет, но возникают проблемы с определенным преобразованием в ежедневный набор данных. У меня есть одна запись для каждого идентификатора с начальной и конечной датами
id age state start_date end_date
123 18 CA 2/17/2019 5/4/2019
223 24 AZ 1/17/2019 3/4/2019
Я хочу создать запись для каждого дня между начальным и конечным днем, чтобы я мог присоединять к нему данные о ежедневной активности. Целевой вывод будет выглядеть примерно так:
id age state start_date
123 18 CA 2/17/2019
123 18 CA 2/18/2019
123 18 CA 2/19/2019
123 18 CA 2/20/2019
123 18 CA 2/21/2019
…
123 18 CA 5/2/2019
123 18 CA 5/3/2019
123 18 CA 5/4/2019
И, конечно, сделайте это для всех идентификаторов и их соответствующих дат начала в наборе данных. Я смог сделать это в Pandas, используя следующий подход
melt = df.melt(id_vars=['id', 'age', 'state'], value_name='date').drop('variable', axis=1)
melt['date'] = pd.to_datetime(melt['date'])
melt = melt.groupby('id').apply(lambda x: x.set_index('date').resample('d').first())\
.ffill()\
.reset_index(level=1)\
.reset_index(drop=True)
Но я довольно новичок в Pyspark (и боролся с этим в Pandas), поэтому я застрял здесь. Любая помощь очень ценится - спасибо!