我正在尝试使用 Dask 和 read_text 对 json 文件运行一系列操作,但我发现当我检查 Linux Systems Monitor 时,只有一个核心以 100% 使用。我怎么知道我在 Dask Bag 上执行的操作是否能够并行化?这是我正在做的事情的基本布局:
import dask.bag as db
import json
js = db.read_text('path/to/json').map(json.loads).filter(lambda d: d['field'] == 'value')
result = js.pluck('field')
result = result.map(cleantext, tbl=tbl).str.lower().remove(exclusion).str.split()
result.map(stopwords,stop=stop).compute()
基本前提是从json文件中提取文本条目,然后执行一些清理操作。这似乎是可以并行化的东西,因为每段文本都可以交给处理器,因为每个文本和每个文本的清理都独立于其他任何一个。这是一个错误的想法吗?有什么我应该做的不同的事情吗?
谢谢。
最佳答案
read_text
函数根据字节范围将文件分成 block 。我的猜测是您的文件足够小,可以放入一个 block 中。您可以通过查看 .npartitions
属性来检查这一点。
>>> js.npartitions
1
如果是这样,那么您可能会考虑减小块大小以增加分区数
>>> js = db.read_text(..., blocksize=1e6)... # 1MB chunks
关于Python Dask 并行运行 Bag 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46626208/