繁体   English   中英

定义块大小时,Dask 包卡在处理中,未定义时仅使用一个工作程序

[英]Dask bag gets stuck on processing when blocksize is defined, only uses one worker when it's not defined

我正在尝试使用 Dask 在本地处理单个大 (1TB) json 文件。 该文件每行有一个对象。 当我没有在read_text函数中指定 blocksize 时,代码可以完美运行,但只能在一个 worker 上运行。 这样就只做了一个分区,在仪表盘中只能看到一个任务。 如果我确实指定了blocksize ,所有工人都会得到任务,但他们永远不会继续处理(至少不会在 12 小时内)。 出了什么问题? 我如何让所有工人实际工作?

代码如下:

import dask.bag as db
from dask.distributed import Client, LocalCluster
cluster = LocalCluster(n_workers=4, 
                threads_per_worker=2,
                memory_limit='2GB')

client = Client(cluster)

db.read_text('./data/uncompressed/latest-all.json', blocksize=1e8)\
    .map(lambda obj: obj[:-2])\
    .map(parse_json)\
    .map(prune)\
    .filter(lambda obj: obj != None)\
    .map(json.dumps)\
    .to_textfiles('./data/proc/*.json')

parse_jsonprune都是没有 IO 的纯 python 函数。

这是定义块大小时仪表板的片段: 仪表板

我的第一个猜测是它们正在工作,但是您的功能非常慢。 您可以通过 ...

  1. 查看个人资料页面以了解员工在哪些方面花费了时间
  2. 查看信息页面,导航到任何工作人员,然后单击“调用堆栈”按钮以查看他们正在处理的内容

您还可以考虑更小的块大小,看看这是否有助于更快地移动。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM