我想对大型数据集使用多重处理来查找两列的乘积,并使用参数中给定参数过滤数据集。我构建了一个测试集,但无法在该集上进行多重处理。
首先,我尝试在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,1,1],'col2': ['aa','aa','bb','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,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”,它就可以正常工作。有人可以帮我调试吗?