Невозможно распараллелить pandas применить с использованием swifter - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь исправить слова, проанализированные с помощью OCR, в документе, пропуская каждое слово через специальный процесс, который сложен по времени. Этот процесс - это моя настраиваемая бизнес-функция, которая просматривает различную семантику слова.

Я пытаюсь ускорить процесс, используя Swifter. У меня 16-ядерный процессор, и я не вижу, что все ядра используются, поскольку я вижу, что только 1 ядро ​​потребляет 100%, а остальные 15 простаивают. Что мне не хватает?

Я пробовал разные варианты, как показано ниже, но безуспешно. Может ли кто-нибудь указать мне, чего мне здесь не хватает? df - это фрейм данных, каждая строка которого содержит слово. right_ocr_string - это бизнес-функция, которая принимает строку в качестве входных данных, проходит через настраиваемую модель ML и возвращает строку.

from pandarallel import pandarallel
pandarallel.initialize(nb_workers=multiprocessing.cpu_count())
df['Corrected'] = df.OCR.parallel_apply(correct_ocr_string)

1 Ответ

0 голосов
/ 06 августа 2020

Вы должны использовать allow_dask_on_strings (enable = True) :

df.OCR.swifter.allow_dask_on_strings(enable=True).apply(correct_ocr_string)

Возможно ли, что вы используете Jupyter Notebook? Здесь могут возникнуть проблемы из-за многопроцессорности (быстрее и пандапараллельно).

...