Предположим, у меня есть такой фрейм данных:
client_id,report_date,date,value_1,value_2
1,2019-01-01,2019-01-01,1,2
1,2019-01-01,2019-01-02,3,4
1,2019-01-01,2019-01-03,5,6
2,2019-01-01,2019-01-01,1,2
2,2019-01-01,2019-01-02,3,4
2,2019-01-01,2019-01-03,5,6
Моя желаемая структура вывода будет CSV или JSON с:
results/
client_id=1/
report_date=2019-01-01
<<somename>>.csv
client_id=2/
report_date=2019-01-01
<<somename>>.csv
Для этого я использую
df.repartition(2, "customer_id", "report_date")
.sortWithinPartitions("date", "value1")
.write.partitionBy("customer_id", "report_date")
.csv(...)
Однако вместо желаемого отдельного файла для каждого клиента и даты отчета (раздела) я получаю два.
Spark SQL - Разница между df.repartition и DataFrameWriter partitionBy? объясняет почему.
Тем не менее, использование repartition(1)
будет работать. Но в случае большого числа customer_id
может возникнуть OOM. Есть ли еще способ достичь желаемого результата? Файл для client_id является небольшим.