Я хочу использовать многопроцессорность для большого набора данных, чтобы найти произведение двух столбцов и отфильтровать набор данных с заданным параметром в аргументе. Я создал тестовый набор, но мне не удалось заставить многопроцессорную работу работать с этим набором.
Сначала я пытаюсь разделить набор данных в функции parallelize_dataframe, а затем применить функции умножения и фильтрации в функции subset_col. ,Позже я добавляю полный набор данных обратно в parallelize_dataframe.
import numpy as np
import pandas as pd
from multiprocessing import Pool
from multiprocessing import Lock
df = pd.DataFrame({'col1': [1, 0, 1, 1, 1, 0, 0, 1, 0, 1],
'col2': ['aa', 'aa', 'aa', 'bb', 'bb', 'bb', 'bb', 'cc', 'cc', 'cc'],
'col3': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'col4': [21, 22, 23, 24, 25, 26, 27, 28, 29, 30]})
def subset_col(df, p):
print("Working with number: " + str(p))
df[col5] = df[col3]*df[col4]
df= df[df['col1'] == p]
def parallelize_dataframe(df, p, func, n_cores=80):
df_split = np.array_split(df, n_cores)
pool = Pool(n_cores)
df = pd.concat(pool.map(func, df_split, p))
pool.close()
pool.join()
return df
df3 = parallelize_dataframe(df,1,subset_col)
Результатом должен быть продукт col3 и col4 с col1, отфильтрованным со значением. Но я всегда получаю сообщение об ошибке:
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in parallelize_dataframe
struct.error: 'i' format requires -2147483648 <= number <= 2147483647
Однако, если я уберу фильтр "p" из всех функций, он будет работать совершенно нормально. Может кто-нибудь помочь мне отладить это?