繁体   English   中英

Dask 字典到延迟的 object 适配器

[英]Dask dictionary to delayed object adapter

我一直在四处寻找,但没有找到解决方案。 我一直在使用 Dask 字典,但团队正在延迟 object 工作。 我需要将我的 dsk{} 转换为最后一步延迟的 object。

我现在应该做什么:

def add(x, y):
    return x+y

dsk = {
      'step1' : (add, 1, 2),
      'step2' : (add, 'step1', 3),
      'final' : (add, 'step2', 'step1'),
}

dask.visualize(dsk)
client.get(dsk, 'final')

在这种工作方式下,我所有的功能都是正常的 python 功能。 但是,这与我们的团队不同。

团队在做什么:

@dask.delayed
def add(x, y)
    return x+y

step1 = add(1, 2)
step2 = add(step1, 3)
final = add(step2, step1)

final.visualize()
client.submit(final)

然后他们将使用最后一步延迟的 object 进一步安排工作。 如何将dsk最后一步最终转换为延迟的object?

我目前的想法(还没有工作)

from dask.optimization import cull

outputs = ['final']
dsk1, dependencies = cull(dsk, outputs)  # remove unnecessary tasks from the graph

在那之后,我不确定如何构造一个延迟的 object。

谢谢!

最后,我找到了一种解决方法。 这个想法是遍历 dsk 以创建延迟的对象和依赖项。

# Covnert dsk dictionary to dask.delayed objects
for dsk_name, dsk_values in dsk.items():
    args = []
    dsk_function = dsk_values[0]
    dsk_arguments = dsk_values[1:]
    for arg in dsk_arguments:
        if isinstance(arg, str):
            # try to find the arguments in globals and return dependent dask object
            args.append( globals().get(arg, arg) )
        else:
            args.append(arg)
    globals()[dsk_name] = dask.delayed(dsk_function)(*args)

我们一般建议人们延迟使用 Dask。 它更不容易出错。 今天,字典通常主要用于在 Dask 本身工作的人。 也就是说,如果您想将字典转换为延迟的 object,我建议您查看dask.Delayed object。

In [1]: from dask.delayed import Delayed                                                                                             

In [2]: Delayed?                                                                                                                     
Init signature: Delayed(key, dsk, length=None)
Docstring:     
Represents a value to be computed by dask.

Equivalent to the output from a single key in a dask graph.
File:           ~/workspace/dask/dask/delayed.py
Type:           type
Subclasses:     DelayedLeaf, DelayedAttr

所以在你的情况下你想要

value = Delayed("final", dsk)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM