Самый быстрый способ применять несколько регулярных выражений последовательно для очистки текста в Pyspark - PullRequest
0 голосов
/ 03 ноября 2019

У меня есть столбец, который я хочу очистить, используя множество регулярных выражений, которые я хочу применять последовательно.

Даже панды это трудоемкий процесс, но, по крайней мере, я могу уйти, применив егокак функция.

В качестве конкретного примера:

import pandas as pd
import re


regex_tuples_list = [(r'\bMR\b', 'middle right', re.I), 
                     ('\bmiddle right area\b', 'center', re.I),
                    ]

def apply_regex(text):
    for (to_repl, value, re_flags) in regex_tuples_list:
        to_repl_compiled = re.compile(to_repl, re_flags)
        text = re.sub(to_repl_compiled, value, text)
    return text

s = pd.Series(['Install the part in the MR', 
               'Check the MR area before using the tool', 
               'Always begin from the middle right area',
              ])

print(s.apply(apply_regex))

## Prints...
#      Install the part in the middle right
#    Check the center before using the tool
#              Always begin from the center

Как лучше всего это сделать с помощью Pyspark?

1 Ответ

0 голосов
/ 07 ноября 2019

Прежде всего, ваш код с pandas может напрямую выполняться на блоках данных без каких-либо других операций, как показано на рисунке ниже.

enter image description here

ТогдаЯ вижу, вы хотите получить лучшую производительность для того же, поэтому я думаю, что вы можете попробовать использовать пакет koalas для PySpark, чтобы получить подобный UX, такой как pandas. А установить пакет koalas в кластер блоков данных очень просто, просто следуйте приведенному ниже рисунку, чтобы установить его.

enter image description here

Примечание: последниеверсия пакета koalas требует spark-2.4.4, поэтому вам необходимо выбрать версию Spark 2.4.4 для создания кластера, как показано на рисунке ниже.

enter image description here

Наконец, вам просто нужно использовать import databricks.koalas as ks вместо import pandas as pd без каких-либо дополнительных изменений кода, чтобы запустить тот же код с PySpark для повышения производительности, как показано на рисунке ниже.

enter image description here

Не беспокойтесь о предупреждении пользователя о вызове устаревшей функции, вы можете обратиться к потоку SO UserWarning: pyarrow.open_stream устарело, используйте pyarrow.ipc.open_stream предупреждений чтобы узнать об этом.

...