Pandas对超大数据帧进行多处理



我正试图使用多处理包来计算一个非常大的Pandas数据帧上的函数。然而,我遇到了以下错误的问题:

OverflowError: cannot serialize a bytes objects larger than 4GiB

在将该解决方案应用于该问题并使用协议4进行酸洗后,我遇到了以下错误,该解决方案本身也引用了该错误:

error: 'i' format requires -2147483648 <= number <= 2147483647

这个问题的答案建议使用数据帧作为全局变量。但理想情况下,我希望数据帧仍然是函数的输入,而不需要多处理库在后台多次复制和酸洗它。

是否有其他方法可以设计代码以避免遇到问题?

我能够用这个例子复制这个问题:

import multiprocessing as mp
import pandas as pd
import numpy as np
import time
import functools
print('Total memory usage for the dataframe: {} GB'.format(df.memory_usage().sum() / 1e9))
def slow_function(some_parameter, df):
time.sleep(1)
return some_parameter
parameters = list(range(100))
with mp.Pool(20) as pool:
function = functools.partial(slow_function, df=df)
results = pool.map(function, parameters)

尝试Dask

import dask.dataframe as dd
df = dd.read_csv('data.csv')

文档:https://docs.dask.org/en/latest/dataframe-api.html

相关内容

  • 没有找到相关文章

最新更新