【问题标题】:Pandas multiprocessing on very large dataframePandas 在非常大的数据帧上进行多处理
【发布时间】:2020-04-15 09:34:44
【问题描述】:

我正在尝试使用 multiprocessing 包在非常大的 Pandas 数据帧上计算函数。但是我遇到了以下错误:

OverflowError: cannot serialize a bytes objects larger than 4GiB

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

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

this question 的答案随后建议将数据框用作全局变量。 但理想情况下,我希望数据框仍然是函数的输入,而不需要多处理库在后台多次复制和腌制它。

有没有其他方法可以让我的代码不会遇到问题?

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

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)

【问题讨论】:

  • 如果您对此没有任何问题,我认为切片数据框可能是一个不错的选择
  • 好建议。我考虑了一下,但不幸的是,该函数需要对整个数据帧进行操作。

标签: python pandas multiprocessing


【解决方案1】:

试试 Dask

import dask.dataframe as dd

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多