Pandas 在熊猫中并行应用函数的时间比预期的长
我有一个简单的cleaner函数,可以从数据帧(和其他预处理内容)中删除特殊字符。我的数据集很大,我想利用多处理来提高性能。我的想法是将数据集分解成块,并在每个块上并行运行此cleaner函数。 我使用了dask库和python中的多处理模块。然而,应用程序似乎被卡住了,并且比单核运行要花更长的时间 这是我的代码:Pandas 在熊猫中并行应用函数的时间比预期的长,pandas,python-multiprocessing,Pandas,Python Multiprocessing,我有一个简单的cleaner函数,可以从数据帧(和其他预处理内容)中删除特殊字符。我的数据集很大,我想利用多处理来提高性能。我的想法是将数据集分解成块,并在每个块上并行运行此cleaner函数。 我使用了dask库和python中的多处理模块。然而,应用程序似乎被卡住了,并且比单核运行要花更长的时间 这是我的代码: from multiprocessing import Pool def parallelize_dataframe(df, func): df_split = np.ar
from multiprocessing import Pool
def parallelize_dataframe(df, func):
df_split = np.array_split(df, num_partitions)
pool = Pool(num_cores)
df = pd.concat(pool.map(func, df_split))
pool.close()
pool.join()
return df
def process_columns(data):
for i in data.columns:
data[i] = data[i].apply(cleaner_func)
return data
mydf2 = parallelize_dataframe(mydf, process_columns)
我可以从资源监视器中看到所有的内核都在使用,但是正如我前面所说的,应用程序被卡住了
p.S。
我在windows server 2012上运行了这个程序(问题发生在这里)。在unix环境上运行这段代码,我实际上看到了多处理库的一些好处。
提前谢谢。在df=pd.concat、pool.close()和pool.join()行中,我觉得有些不对劲。为什么要在返回的df已经分配了上面两行之后加入呢?这些天我会使用并摆脱手动多处理headhache@flyingmeatball. 我明白你的意思,实际上不需要concat。但是,即使删除此函数调用,问题仍然存在。在df=pd.concat、pool.close()、pool.join()行中,我觉得有些不对劲。为什么要在返回的df已经分配了上面两行之后加入呢?这些天我会使用并摆脱手动多处理headhache@flyingmeatball. 我明白你的意思,实际上不需要concat。但是,即使删除此函数调用,问题仍然存在。