Я пытаюсь распараллелить операцию pandas, которая разбивает столбец данных с разделенными запятыми значениями на 2 столбца.Обычная операция pandas занимает около 5 секунд на моем экземпляре python, который напрямую использует df.str.split
в этом конкретном столбце.Мой фрейм данных содержит 2 миллиона строк, и поэтому я пытаюсь сократить время выполнения кода.
В качестве первого подхода к распараллеливанию я использую многопроцессорную библиотеку Python, создавая пулы, эквивалентные количеству ядер ЦП, доступных намой экземпляр.Для второго подхода к той же проблеме я использую библиотеку concurrent.futures
, упомянув chunksize
из 4. Однако я вижу, что многопроцессорная библиотека занимает примерно то же время, что и обычная операция pandas (5 секунд), тогда как concurrent.futures
занимает больше минуты, чтобы запустить ту же строку.
1) Поддерживает ли Google Compute Engine эти многопроцессорные библиотеки Python?2) Почему параллельная обработка не работает на GCP?
Заранее спасибо.Ниже приведен пример кода:
import pandas as pd
from multiprocessing import Pool
def split(e):
return e.split(",")
df = pd.DataFrame({'XYZ':['CAT,DOG',
'CAT,DOG','CAT,DOG']})
pool = Pool(4)
df_new = pd.DataFrame(pool.map(split, df['XYZ'], columns = ['a','b'])
df_new = pd.concat([df, df_new], axis=1)
Приведенный выше код занимает примерно то же время, что и приведенный ниже код, что является обычной операцией панд, использующей только одно ядро:
df['a'], df['b'] = df['XYZ'].str.split(',',1).str
Uisngconcurrent.futures:
import concurrent.futures
with concurrent.futures.ProcessPoolExecutor() as pool:
a = pd.DataFrame(pool.map(split, df['XYZ'], chunksize = 4),
columns=['a','b'])
print (a)
Приведенный выше код с использованием concurrent.futures занимает больше минуты для запуска на GCP.Обратите внимание, что код, который я разместил, является просто примером кода.Фрейм данных, который я использую в проекте, содержит 2 миллиона таких строк.Любая помощь будет очень признателен!