1

我正在使用 Dask 进行并行计算,并希望使用langdetect. 但是,我仍然无法获得任何速度来获取列中行的语言。

下面是我的代码:

import dask.dataframe as dd
data = dd.read_csv('name.csv')# has a column called short_description
def some_fn(e):
    return e['short_description'].apply(langdetect.detect)

data['Language'] = data.map_partitions(some_fn, meta='string')# adding a new column called Language.

这个 csav 文件有 800000 行,每行包含大约 800000 行。20字长句。

任何关于如何更快地实现语言检测的建议,因为目前需要 2-3 小时。

4

1 回答 1

0

默认情况下,dask 数据帧使用线程池进行处理。我的猜测是您的语言检测算法是用纯 Python 编写的(而不是像大多数 Pandas 那样的 C/Cython),因此受到 GIL 的限制。这意味着您应该使用进程而不是线程。scheduler="processes"您可以通过将关键字添加到任何计算或持久调用来要求 Dask 使用进程

df.compute(scheduler="processes")

有关 Dask 不同调度程序以及何时使用它们的更多信息,请参见:https ://docs.dask.org/en/latest/scheduling.html

于 2020-04-04T16:32:27.837 回答