【问题标题】:Python Dask Running Bag operations in parallelPython Dask Running Bag 并行操作
【发布时间】:2018-03-19 11:14:29
【问题描述】:

我正在尝试使用 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文件中提取文本条目,然后进行一些清理操作。这似乎是可以并行化的,因为每个文本都可以交给处理器,因为每个文本和每个文本的清理都独立于其他任何一个。这是一个错误的想法吗?有什么我应该做的不同的事情吗?

谢谢。

【问题讨论】:

    标签: python json python-3.x parallel-processing dask


    【解决方案1】:

    read_text 函数根据字节范围将文件分成块。我的猜测是您的文件足够小,可以放入一大块。您可以通过查看.npartitions 属性来检查这一点。

    >>> js.npartitions
    1
    

    如果是这样,那么您可能会考虑减小块大小以增加分区数

    >>> js = db.read_text(..., blocksize=1e6)...  # 1MB chunks
    

    【讨论】:

    • 给这个人一枚勋章!看起来就是这样。当我进行更改时,所有处理器都开始启动!我原以为是这样的,因为对于 Dask 中的其他数据结构,人们说检查 npartitions 但这不能根据 read_text 的文档进行设置,但是设置块大小是有意义的。谢谢!
    • 您也可以使用repartition 方法,但这不如之前使用read_text 的效率高。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 2017-05-13
    • 2010-11-10
    • 2019-04-19
    • 1970-01-01
    • 2022-08-06
    相关资源
    最近更新 更多