我试图使用dask.bag来保存给定类的对象,其中每个实例都捕获文档的各种属性(标题、字数等)。
该对象有一些关联的方法,它们设置对象的不同属性。
例如:
import dask.bag as db
class Item:
def __init__(self, value):
self.value = 'My value is: "{}"'.format(value)
def modify(self):
self.value = 'My value used to be: "{}"'.format(self.value)
def generateItems():
i = 1
while i <= 100:
yield(Item(i))
i += 1
b = db.from_sequence(generateItems())
# looks like:
b.take(1)[0].value #'My value is: "1"'如何在第一个包( modify-d,b)中创建每个-d实例的包?
期望输出:'My value used to be: "My value is: "1""'等。
我试过:
c = b.map(lambda x: x.modify() )
c.take(1)[0].value
#AttributeError: 'NoneType' object has no attribute 'value'
# Also tried:
d = b.map(lambda x: x[0].modify() )
b.take(1) # TypeError: 'Item' object does not support indexing发布于 2018-03-28 11:42:48
这里的问题是,c获得运行lambda函数的结果,而Item.modify()没有输出。通常,在Dask中,您期望返回基于输入的新对象,而不是修改现有的How does dask.delayed handle mutable inputs? --考虑如果多个任务在多个线程或多个进程中对同一个对象进行操作会发生什么。
在这个最简单的例子中,您可以通过将return self添加到mutate()的末尾,或者将lambda表达式更改为x.mutate() and x来获得您想要的结果;但是不要这样编程,而是用所需的新值创建一个新的对象。
https://stackoverflow.com/questions/49520724
复制相似问题