Pandas многопроцессорная обработка на очень большом фрейме данных - PullRequest
1 голос
/ 15 апреля 2020

Я пытаюсь использовать многопроцессорный пакет для вычисления функции на очень большом 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)

1 Ответ

1 голос
/ 15 апреля 2020

попробовать Dask

import dask.dataframe as dd

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

документы: https://docs.dask.org/en/latest/dataframe-api.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...