有没有办法在执行昂贵的计算时指示dask保持中间值?
在下面的示例中,我希望dask保留在计算d['c']
时创建的中间列d['d']
。
## 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']
在某个地方闲逛?这种工作流程的最佳实践是什么?我计划创建许多中间列以用于许多后续计算,并且不希望每次都从头开始计算它们。或者我的理解完全错了?
答案 0 :(得分:3)
您可以同时在许多内容上调用compute来共享中间结果
dask.compute(d.min(), d.max())
您可以使用.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。