我正在尝试使用 Dask 打开一个 jsonl 文件,当我第一次运行该程序时,我收到一条警告,称工作人员使用的内存超出了分配的内存,最终保姆尝试终止该工作人员但失败了,然后整个程序最终崩溃程序最终说所有 4 个工人在尝试运行它时都死了。
我尝试询问 chat-gpt 并查看文档寻找答案,但我找不到工作日志或任何有关如何解决问题的信息,但无济于事,我看到的唯一建议是禁用保姆,但我决定这样做这不是一个好主意,因为它们肯定是我的代码存在根本性错误,所以我转向堆栈溢出来寻求答案,因为我迷路了。
from dask.distributed import LocalCluster
import dask.dataframe as dd
from multiprocessing import freeze_support
if __name__ == '__main__':
freeze_support()
cluster = LocalCluster(n_workers=2,processes=True,threads_per_worker=200)
client = cluster.get_client()
df = dd.read_json("merged_en.jsonl")
df.x.sum().compute()
client.close()
cluster.close()
因此,这里发生的情况是,您尝试将文件加载到单个分区中,而该文件太大,无法容纳一个工作人员的内存。
如果文件是 JSON 行数据(正如预期的
jsonl
扩展名),您应该使用 lines
kwarg 并指定 blocksize
:
df = dd.read_json("merged_en.jsonl", lines=True, blocksize="128 MiB")
请参阅文档了解更多信息。