我正在尝试在pandas数据帧上并行化函数的应用程序。简单的方法是:
pandarallel.initialize(progress_bar=True, verbose=0, use_memory_fs=True, nb_workers=2)
df.parallel_apply(lambda x: my_func(x['column1']), axis=1)
然而,由于某种原因,pandarallel库似乎在我的情况下不起作用。因此,我正在考虑使用pool.map((:手动执行此操作
def parallelize_dataframe(df, func, n_cores=2):
df_split = np.array_split(df, n_cores)
pool = Pool(n_cores)
df = pd.concat(pool.map(func, df_split))
pool.close()
pool.join()
return df
df = parallelize_dataframe(df, my_func, n_cores=2)
然而,我不知道如何将pool.map()
更改为仅应用于"column1",以获得第2行中的等效代码。
p.S.my_func是一个用于从URL获取图像并对其应用图像处理预测的函数。
尝试拆分df['column']
而不是df
:
def parallelize_dataframe(df, func, n_cores=2):
df_split = np.array_split(df['column'], n_cores)
# added ^^^^^^^^^^
pool = Pool(n_cores)
df = pd.concat(pool.map(func, df_split))
pool.close()
pool.join()
return df