我必须处理许多大(约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()
函数不必在每次调用时都从磁盘读取大文件?
答案 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)