перераспределение в один выходной файл на клиента - PullRequest
0 голосов
/ 19 января 2019

Предположим, у меня есть такой фрейм данных:

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 является небольшим.

...