Как сделать несколько расчетов Dask без перезагрузки моего большого CSV - PullRequest
1 голос
/ 22 марта 2019

Мне нужно обработать несколько больших (около 10 ГБ) файлов CSV. В настоящее время я использую Dask для предварительной обработки данных в некоторую агрегированную статистику, которую затем анализирую с помощью обычных панд.

У меня проблема в том, что Dask перезагружает данные для каждого вызова на compute(). Некоторый фиктивный код для иллюстрации проблемы:

import dask.dataframe as dd

ddf = dd.read_csv('very_large_file.csv')  # ca. 10GB

# Every line seems to trigger painfully slow re-reading of the CSV file from disk!
groupstats_A = ddf.groupby(['col1', 'col2']) \
                  .mean() \
                  .compute()
groupstats_B = ddf.groupby(['col3']) \
                  .mean() \
                  .compute()
groupstats_C = ddf.groupby(['col1', 'col2', 'col3']) \
                  .mean() \
                  .compute()

Есть ли способ оптимизировать этот код таким образом, чтобы функции compute() не приходилось читать большой файл с диска при каждом вызове?

1 Ответ

0 голосов
/ 22 марта 2019

Это очень похоже на дубликат, но я не могу найти оригинал.

Вы можете передать несколько вещей для вычисления следующим образом, и любые возможные промежуточные продукты будут предоставлены.

groupstats_A = ddf.groupby(['col1', 'col2']) \
                  .mean()
groupstats_B = ddf.groupby(['col3']) \
                  .mean()
groupstats_C = ddf.groupby(['col1', 'col2', 'col3']) \
                  .mean()
A, B, C = dask.compute(groupstats_A, groupstats_B, groupstats_C)
...