gpt4 book ai didi

python - 改变 dask.bag 内的对象

转载 作者:行者123 更新时间:2023-12-01 02:02:00 29 4
gpt4 key购买 nike

我正在尝试使用 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"'

如何为第一个包 (b) 中的每个 modify-d 实例创建一个包?

期望的输出:'我的值曾经是:“我的值是:“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

最佳答案

这里的问题是,c 获取运行 lambda 函数的结果,而 Item.modify() 没有输出。通常在 Dask 中,您期望根据输入返回新对象,而不是改变现有对象 How does dask.delayed handle mutable inputs? - 考虑如果多个任务在多个线程或多个进程中对同一个对象进行操作会发生什么。

在这个最简单的情况下,您可以通过在 mutate() 末尾添加 return self 或将 lambda 表达式更改为 来获得所需的结果x.mutate() 和 x;但不要以这种方式编程,而是创建一个具有所需新值的新对象。

关于python - 改变 dask.bag 内的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49520724/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com