You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

dask.bag.read_text中files_per_partitions参数含义及最优取值咨询

dask.bag.read_text的files_per_partition参数答疑

1. 参数中partition的含义

这里的分区和Dask DataFrame的分区是同一逻辑的并行处理单元,区别仅在于承载的数据类型不同:

  • Dask DataFrame的每个分区对应一个Pandas DataFrame,而Dask Bag的每个分区对应一个普通的Python可迭代序列
  • files_per_partition的作用就是控制单个Bag分区打包读取的文件数量,比如你设置为200时,7300个输入文件会被拆分为约37个分区,每个分区一次性读取200个文件的内容,作为独立的并行任务单元交给worker处理。

2. 参数的最优取值方法

该参数没有通用的固定最优值,需要结合你的文件大小、后续处理的内存膨胀率、worker内存限制共同判断,你遇到的KilledWorker就是取值过高直接导致的:

  • 你当前场景下单个原始JSON文件大小为70KB,JSON文本加载为Python字典、再经过process_dict处理后,内存通常会膨胀5~15倍,按10倍的平均膨胀率计算,单个文件处理后的内存约为700KB。当你把files_per_partition设为3000时,单个分区处理后的内存会达到2.1GB左右,再加上Dask运行时的额外开销、worker可能同时处理多个分区任务的情况,自然会超过2.43GiB的内存限制,触发worker被强制杀死。
  • 通用取值逻辑:保证单个分区处理完成后的内存占用不超过单worker内存上限的10%15%即可。你当前2.43GiB的worker内存,单个分区处理后内存最好控制在250MiB以内,对应你场景下`files_per_partition`设置为200300是比较合理的区间。
  • 小优化提示:你代码中后续会重分区为5个再做聚合,上游初始分区数不需要设置得过少,否则既浪费并行处理能力,也会抬高单分区的内存压力。

内容的提问来源于stack exchange,提问作者David Palazzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 08:15:03