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 - df.repartition 和 DataFrameWriter partitionBy 之间的区别?解释了原因。但是,使用 arepartition(1)
会起作用。但是如果数量customer_id
很大可能会遇到OOM。还有没有办法达到预期的结果?每个 client_id 的文件很小。
解决方案
推荐阅读
- javascript - 如何计算 Node.js 包的加载时间损失?
- php - Bootstrap 4 Image 产品没有正确排列
- proguard - 无法忽略 proguard 警告
- vue.js - Vue:如何以正确的方式迭代更新道具中的属性
- java - 如何在警报管理器中满足预定时间列表以推送通知
- testing - 协议消费者测试是否仅用于生成合同 json 文件?
- java - 使用耳内反射改变静态场
- r - mutate_impl(.data, dots) 中的错误:评估错误:对于 Date 类的索引,只允许使用年、季度、月、周和日期间
- android - onCreate 时为 Sqlite 赋予初始值
- java - 正则表达式忽略标签之间的一个词