apache-spark - 如何在 spark 中使用 repartition() 指定文件大小
问题描述
我使用 pyspark 并且我有一个大型数据源,我想重新分区,明确指定每个分区的文件大小。
我知道使用该repartition(500)
功能会将我的镶木地板分成 500 个大小几乎相等的文件。问题是每天都会有新数据添加到这个数据源中。在某些日子可能会有很大的输入,而在某些日子可能会有较小的输入。因此,当查看一段时间内的分区文件大小分布时,它会因200KB
文件而异700KB
。
我正在考虑指定每个分区的最大大小,以便我每天获得每个文件或多或少相同的文件大小,而与文件数量无关。这将有助于我稍后在这个大型数据集上运行我的工作,以避免扭曲的执行器时间和洗牌时间等。
有没有办法使用repartition()
函数或在将数据框写入镶木地板时指定它?
解决方案
您可以考虑使用参数编写结果maxRecordsPerFile
。
storage_location = //...
estimated_records_with_desired_size = 2000
result_df.write.option(
"maxRecordsPerFile",
estimated_records_with_desired_size) \
.parquet(storage_location, compression="snappy")
推荐阅读
- linux - 如何为 DPDK 和 malloc 选择大页面大小?
- regex - 正则表达式大写仅用于 2 个字符
- ruby-on-rails - Rails 检查文本中的多个单词作为查询
- neo4j - 使用任意长文章文本查询 lucene 索引以检查文章中的所有匹配项(通过 neo4j)
- scikit-learn - 高斯过程回归器的 SHAP 值为零
- google-analytics - Google Log Stackdriver 接收器/路由器
- php - 如何使用自定义字段中的复选框过滤选项?
- java - react-native-config:找不到符号
- c - 想了解如何配置STM32 CAN过滤器,需要什么计算
- php - Laravel FCM 推送通知更改默认声音