假设我有一个像这样的数据框:
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的文件很小。