有没有办法指示 dask 在执行昂贵的计算时保留中间值?
在下面的示例中,我希望 dask 保留计算 d['d']
时创建的中间列 d['c']
。
## very large file
d = ddf.read_csv("F:/tmp.csv")
d['c'] = d['a'] * d['b']
d['d'] = d['c'] + 1
## first call
%timeit d['d'].value_counts().compute()
## second call takes roughly the same time
%timeit d['d'].value_counts().compute()
但是在我的实验中,它似乎每次都在计算d['c']
。有没有办法告诉 dask 让 d['c']
卡在某个地方?这种工作流程的最佳实践是什么?我计划创建大量中间列以在许多后续计算中使用,并且不想每次都从头开始计算它们。还是我的理解完全错误?
最佳答案
同时调用多个结果
您可以同时对许多事物调用计算以共享中间结果
dask.compute(d.min(), d.max())
使用 persist 将数据保存在内存中
您可以使用 .persist()
方法或 dask.persist(...)
函数来计算结果,但将它们保留为 dask 集合
d['c'] = d['a'] * d['b']
d['d'] = (d['c'] + 1).persist()
或
d['c'] = d['a'] * d['b']
d['d'] = d['c'] + 1
d = d.persist()
机会性缓存
如果您使用的是第一代单机调度程序,那么您可以使用机会缓存。请参阅http://dask.pydata.org/en/latest/caching.html了解更多信息。
关于python - 使用 dask 保留中间 DataFrame 计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44829843/