如何在Dask任务图中迭代集合

如何在Dask任务图中迭代集合,dask,Dask,我有下面的任务图 def getdocs(): return [doc1,doc2] def tosents(doc): return doc.split(".") # Except doc is a list of docs def towords(sent): return sent.split(" ") graph = { "documents": (getdocs,), "sentences": (tosents,"documents"

我有下面的任务图

def getdocs():
    return [doc1,doc2]

def tosents(doc):
    return doc.split(".")  # Except doc is a list of docs

def towords(sent):
    return sent.split(" ")  

graph = {
    "documents": (getdocs,),
    "sentences": (tosents,"documents"),
    "words": (towords, "sentences")
}
每个任务都返回一个列表,但我希望这些结果与接收函数并行,接收函数应该只接受一个值(例如字符串)。目前,结果正在传递

我如何指示要通过接收函数枚举的结果?使用收益率


感谢您的高级指导。

人们构建自己的Dask图是不寻常的,因为
延迟的
接口非常容易使用。如果你有一个函数,它返回一个已知数量的输出,你想单独处理(即并行操作),你可以这样做

ddocs = delayed(getdocs, nout=2)
sentences = [delayed(tosentences)(doc) for doc in ddocs()]
其中,
tosentences
将一张单据作为输入。
句子的每个元素都是一个延迟对象,有自己的图形。如果将它们一起传递到
compute()
,则可以并行计算它们

-编辑-


ddoc
需要调用;您不能迭代延迟函数,但可以迭代它生成的延迟对象。

谢谢。是的,我想看看我是否可以用一种近乎声明的方式来构建任务图。以编程方式进行,虽然易于编程,但与声明式方法相比有其缺点。那么在你的例子中,我还能想象“句子”并在那一点上得到完整的任务图吗?它确实会作为一个整体崩溃。我想构建任务图,并最终以数据驱动的方法将其可视化。我尝试了您的示例,但它不起作用。TypeError:未指定长度的延迟对象不可编辑