繁体   English   中英

Pandas 非常大的多处理 dataframe

[英]Pandas multiprocessing on very large dataframe

我正在尝试使用多处理 package 在非常大的 Pandas dataframe 上计算 function。但是我遇到了以下错误的问题:

OverflowError: cannot serialize a bytes objects larger than 4GiB

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

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

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

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

我能够用这个例子重现这个问题:

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)

试试达斯克

import dask.dataframe as dd

df = dd.read_csv('data.csv')

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM