Dask delayed object of unspecified length not iterable error when combining dictionaries(DASK延迟的未指定长度的对象在合并词典时不会出现可迭代错误)
本文介绍了DASK延迟的未指定长度的对象在合并词典时不会出现可迭代错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正尝试使用DASK并行构建一个词典,但遇到了一个TypeError: Delayed objects of unspecified length are not iterable
。
我正在尝试同时计算add
、subtract
和multiply
,以便更快地构建词典。
以下是代表我的用例的一些代码:
import dask
from dask.delayed import delayed
x1 = {'a': 1, 'b': 2, 'c': 3}
x2 = {'a': 4, 'b': 5, 'c': 6}
@delayed
def add(d1, d2):
z = {}
z['func1_a'] = d1['a'] + d2['a']
z['func1_b'] = d1['b'] + d2['b']
z['func1_c'] = d1['c'] + d2['c']
return z
@delayed
def subtract(d1, d2):
z = {}
z['func2_a'] = d1['a'] - d2['a']
z['func2_b'] = d1['b'] - d2['b']
z['func2_c'] = d1['c'] - d2['c']
return z
@delayed
def multiply(d1, d2):
z = {}
z['func3_a'] = d1['a'] * d2['a']
z['func3_b'] = d1['b'] * d2['b']
z['func3_c'] = d1['c'] * d2['c']
return z
@delayed
def last_step(d1, d2):
z = {}
z.update(add(d1, d2))
z.update(subtract(d1, d2))
z.update(multiply(d1, d2))
return z
最后,当我运行:
>>> dask.compute(last_step(x1, x2))
<ipython-input-6-1153797c9d18> in final(d1, d2)
2 def last_step(d1, d2):
3 z = {}
----> 4 z.update(add(d1, d2))
5 z.update(subtract(d1, d2))
6 z.update(multiply(d1, d2))
/Users/me/anaconda3/lib/python3.6/site-packages/dask/delayed.py in __iter__(self)
409 def __iter__(self):
410 if getattr(self, '_length', None) is None:
--> 411 raise TypeError("Delayed objects of unspecified length are "
412 "not iterable")
413 for i in range(self._length):
TypeError: Delayed objects of unspecified length are not iterable
我在这里做错了什么/听不懂?
推荐答案
您的z
对象是词典,而add
的结果是延迟对象。更新方法需要一个词典。它没有办法知道如何使用object-that-will-become-a-dict-when-you-call-compute.
在这种情况下,我建议将z
转换为延迟对象
# z = {}
z = delayed({})
z将不再是一部词典,它将成为一部词典。这意味着您不能再检查键,不能使用getitem语法插入它,不能执行任何像.update
这样的可变操作,但仍然可以调用它上的延迟方法。在您的情况下,我可能会使用像toolz.merge
只是为了设定期望。Dask.Delayed并不会完全并行化任意的Python代码。您仍然需要做一些工作来考虑对象何时延迟以及哪些是具体的。
这篇关于DASK延迟的未指定长度的对象在合并词典时不会出现可迭代错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:DASK延迟的未指定长度的对象在合并词典时不会出现可迭代错误
基础教程推荐
猜你喜欢
- 使 Python 脚本在 Windows 上运行而不指定“.py";延期 2022-01-01
- 合并具有多索引的两个数据帧 2022-01-01
- 哪些 Python 包提供独立的事件系统? 2022-01-01
- 症状类型错误:无法确定关系的真值 2022-01-01
- 将 YAML 文件转换为 python dict 2022-01-01
- 如何在Python中绘制多元函数? 2022-01-01
- 使用Python匹配Stata加权xtil命令的确定方法? 2022-01-01
- 如何在 Python 中检测文件是否为二进制(非文本)文 2022-01-01
- 使用 Google App Engine (Python) 将文件上传到 Google Cloud Storage 2022-01-01
- Python 的 List 是如何实现的? 2022-01-01