python - 无法使用 swifter 并行化 pandas 应用
问题描述
我正在尝试通过将每个单词传递给时间复杂的自定义过程来更正文档中的 OCR 解析单词。该过程是我的自定义业务功能,它确实查看了单词的各种语义。
我正在尝试使用 swifter 来加快进程。我有一个 16 核处理器,但我没有看到所有内核都在使用,因为我看到只有 1 个内核正在消耗 100%,其余 15 个空闲。我错过了什么?
我尝试了以下不同的选项,但没有成功。有人可以指出我在这里缺少什么吗?df 是一个数据框,每行包含一个单词。correct_ocr_string 是一个业务函数,它以字符串为输入,通过自定义 ML 模型运行并返回一个字符串。
df['Corrected'] = df.OCR.swifter .progress_bar(False).apply(lambda x: correct_ocr_string(x))
df['Corrected'] = df.OCR.swifter .progress_bar(False).apply(correct_ocr_string)
v_fnc = np.vectorize(correct_ocr_string)
df['Corrected'] = df.OCR.swifter .progress_bar(False).apply(v_fnc)
我也试过pandarallel.parallel_apply
没有成功
from pandarallel import pandarallel
pandarallel.initialize(nb_workers=multiprocessing.cpu_count())
df['Corrected'] = df.OCR.parallel_apply(correct_ocr_string)
解决方案
您必须使用allow_dask_on_strings(enable=True):
df.OCR.swifter.allow_dask_on_strings(enable=True).apply(correct_ocr_string)
您可以使用 Jupyter Notebook 吗?多处理可能会导致问题(更快和 pandarallel)。
推荐阅读
- c++ - 将随机数据写入文本文件c ++
- c# - 用于 StorageFolder.GetFolderFromPathAsync 的 CS4036
- autohotkey - 我是哑巴吗?自动热键脚本的这一行有什么问题
- python - 在字符串变量中添加换行符
- html - 哪种 Web Scraping 提取方法更好?
- c - 有什么方法可以降低下面给出的函数的时间复杂度?
- react-native - 嗨,我是 React Native 的新手,使用 Native-base 我正在尝试设计卡片视图
- javascript - 媒体查询中的某些内容不起作用
- python - 如何使用带有精灵的图像字典?
- python - numpy数组的异常重塑