python - 使用 dask 保留中间 DataFrame 计算

标签 python dask

有没有办法指示 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/

相关文章:

python - 合并python中两个已排序的项目列表

python - 将 tqdm 与延迟执行与 python 中的 dask 相结合

python - dask.DataFrame.apply 和可变长度数据

python - 从 Dask DataFrame 中删除列数不相等的行

python - 如何分析毒性?

python - 使用抽象类对多对多关系建模

python - "ObjectId is not JSON serializable?"时如何正确jsonify Mongo DB文档

python - 如何使用 dask 读取 csv 并处理行?

python - 无法为 Dask 安装 tlz 模块 Python

python - matplotlib 中的矩形位置不正确