将每个客户重新分配到一个输出文件

时间:2019-01-19 09:30:51

标签: data-partitioning

假设我有一个像这样的数据框:

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 - Difference between df.repartition and DataFrameWriter partitionBy?解释了原因。 但是,使用repartition(1)是可以的。但是如果customer_id的数量很大,可能会遇到OOM。还有没有办法达到预期的结果?每个client_id的文件很小。

0 个答案:

没有答案