首页 > 解决方案 > 火花重新分区到每个客户的一个输出文件

问题描述

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

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 之间的区别?解释了原因。但是,使用 arepartition(1)会起作用。但是如果数量customer_id很大可能会遇到OOM。还有没有办法达到预期的结果?每个 client_id 的文件很小。

标签: data-partitioning

解决方案


推荐阅读