如何在不重新加载大型CSV的情况下进行多次Dask计算

时间:2019-03-22 12:50:03

标签: python dask

我必须处理许多大(约10GB)的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 :(得分:0)

这很像重复,但是我找不到原始照片。

您可以按以下方式传递多个内容进行计算,并且任何可能的中间物都将被共享。

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)