是否可以对pandas数据帧进行分区以进行多处理?
具体来说,我的DataFrames太大了,只需几分钟即可在单个处理器上运行一次转换。
我知道,我可以在Spark中做到这一点但是已经编写了很多代码,所以我最好还是坚持使用我拥有的并获得并行功能。
答案 0 :(得分:3)
略微修改https://stackoverflow.com/a/29281494/5351271我可以获得解决方案来处理行。
from multiprocessing import Pool, cpu_count
def applyParallel(dfGrouped, func):
with Pool(cpu_count()) as p:
ret_list = p.map(func, [group for name, group in dfGrouped])
return pandas.concat(ret_list)
def apply_row_foo(input_df):
return input_df.apply((row_foo), axis=1)
n_chunks = 10
grouped = df.groupby(df.index // n_chunks)
applyParallel(grouped, apply_row_foo)
如果索引不仅仅是一个行号,只需按np.arange(len(df))// n_chunks
分组决定不优雅,但在我的用例中工作。