使用dask

时间:2017-06-29 15:50:37

标签: python dask

有没有办法在执行昂贵的计算时指示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']在某个地方闲逛?这种工作流程的最佳实践是什么?我计划创建许多中间列以用于许多后续计算,并且不希望每次都从头开始计算它们。或者我的理解完全错了?

1 个答案:

答案 0 :(得分:3)

同时调用多个结果

您可以同时在许多内容上调用compute来共享中间结果

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