Запись фрейма данных pyspark в папку s3 с использованием раздела - PullRequest
0 голосов
/ 27 марта 2020

У меня есть относительно небольшой размер фрейма данных размером 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 
.
.
. 
...