不支持延迟对象的真实性

Truth of Delayed objects is not Supported

我正在使用 dask 来延迟计算我的代码库中 return 系列的一些函数。到目前为止,大多数操作似乎都按预期运行 - 除了我使用 np.average.

我的函数 return 是 pd.Series 然后我想计算加权平均值。

下面是非dask和dask版本:

import dask
import numpy as np
import pandas as pd

s = pd.Series([1,2,3])
a = np.average(s, weights=s)
print(a)

ds = dask.delayed(lambda: s)()
a = np.average(ds, weights=ds)
print(a.compute())

np.average 调用引发了 TypeError: Truth of Delayed objects is not supported

不确定我的用法的哪一部分是错误的。

问题是您正在对 dask 延迟对象调用 Numpy 函数 np.average。 Numpy 函数不知道如何处理 Dask Delayed 对象,因此它会引发错误。解决方法是也延迟 numpy 函数。

您可以执行以下操作:

a = dask.delayed(np.average)(ds, weights=ds)
a.compute()

这行得通(您会得到答案),但很可能不是您想要的。正在对数据调用单个函数 - 你确实在进行惰性操作,如果你有很多这样的计算,你可能会获得并行性。但是,我想说像这样传递延迟的 pandas 系列是很不寻常的。

您可能需要阅读 high level 数组和数据框接口,其中已为您完成拆分系列和数组的逻辑。