gpt4 book ai didi

python - dask:client.persist 和 client.compute 之间的区别

转载 作者:太空狗 更新时间:2023-10-29 20:44:43 24 4
gpt4 key购买 nike

我对 client.persist()client.compute() 之间的区别感到困惑(在某些情况下)似乎都开始了我的计算,并且两者返回异步对象,但不是在我的简单示例中:

在这个例子中

from dask.distributed import Client
from dask import delayed
client = Client()

def f(*args):
return args

result = [delayed(f)(x) for x in range(1000)]

x1 = client.compute(result)
x2 = client.persist(result)

这里的 x1x2 是不同的,但在一个不那么琐碎的计算中,其中 result 也是 Delayed 的列表> 对象,使用 client.persist(result) 开始计算,就像 client.compute(result) 一样。

最佳答案

相关文档页面在这里:http://distributed.readthedocs.io/en/latest/manage-computation.html#dask-collections-to-futures

正如您所说,Client.computeClient.persist 都采用惰性 Dask 集合并启动它们在集群上运行。它们返回的内容不同。

  1. Client.persist 为每个 dask 集合返回一个副本,它们以前的惰性计算现在已提交以在集群上运行。这些集合的任务图现在只指向当前正在运行的 Future 对象。

    所以如果你坚持一个有 100 个分区的 dask 数据框,你会回来一个有 100 个分区的 dask 数据框,每个分区指向当前在集群上运行的 future 。

  2. Client.compute 为每个集合返回一个 Future。这个 future 指的是在一个 worker 上收集的单个 Python 对象结果。这通常用于小的结果。

    因此,如果您计算一个包含 100 个分区的 dask.dataframe,您会得到一个指向包含所有数据的单个 Pandas 数据帧的 Future

更实用的是,我建议当您的结果很大并且需要分布在多台计算机上时使用持久化,而当您的结果很小并且您希望它只在一台计算机上时使用计算。

在实践中,我很少使用 Client.compute,而是更喜欢使用 persist 进行中间阶段,使用 dask.compute 来提取最终结果。

df = dd.read_csv('...')
df = df[df.name == 'alice']
df = df.persist() # compute up to here, keep results in memory

>>> df.value.max().compute()
100

>>> df.value.min().compute()
0

使用延迟时

延迟对象无论如何只有一个“分区”,因此计算和持久化更容易互换。 Persist 会给你一个惰性的 dask.delayed 对象,而 compute 会给你一个即时的 Future 对象。

关于python - dask:client.persist 和 client.compute 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41806850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com