首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >改变dask.bag中的对象

改变dask.bag中的对象
EN

Stack Overflow用户
提问于 2018-03-27 19:10:51
回答 1查看 187关注 0票数 1

我试图使用dask.bag来保存给定类的对象,其中每个实例都捕获文档的各种属性(标题、字数等)。

该对象有一些关联的方法,它们设置对象的不同属性。

例如:

代码语言:javascript
复制
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""'等。

我试过:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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来获得您想要的结果;但是不要这样编程,而是用所需的新值创建一个新的对象。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49520724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档