У меня есть относительно небольшой размер фрейма данных размером 3,7 млн. Со столбцом даты (01-01-2018 до даты) и столбцом партнера вместе с другими уникальными идентификаторами. Я хочу записать фрейм данных в местоположение s3, разделив его сначала по дате, а затем по партнеру (5 партнеров, например, P1, P2, P3, P4 и P5). Ниже моя схема и код
df schema is
id1: long
id2: long
id3: long
partner: string
dt: date
df = df1.select('dt','partner').distinct().groupBy('partner').agg(F.collect_set('dt').alias('dt'))
dummy_list = []
for i in df.collect():
dummy_list.append(i.partner)
for src in dummy_list:
for dt1 in i.dt:
df.filter(F.col('dt') == dt1).filter(F.col('partner') == src).write.mode("overwrite").parquet("s3://test/parquet/dt={}/partner={}".format(datetime.strftime(dt1,'%Y-%m-%d'),src))
приведенный выше код выполняется успешно, но на запись кадра данных в расположение s3 уходит более 4-5 часов (я отменил его на полпути). Любые способы я могу значительно сократить время? Может ли кто-нибудь помочь мне проверить код или исправить код в случае необходимости, чтобы добиться этого быстрее. Я новичок в этом, ценю любую помощь.
Пример данных
id1|id2|id3|partner|dt
100|200|300|p1 |01-01-2018
101|200|30 |p2 |01-01-2020
102|202|311|p3 |01-01-2019
103|201|320|p4 |01-02-2019
104|210|305|p5 |01-03-2018
.
.
.