Dask @delayed 将数据帧转换为 pandas

Dask @delayed converts dataframes to pandas

我有这段代码调用一个 dask @delayed 函数,该函数将 N 个 dask 数据帧作为输入,returns 一个 dask 数据帧作为输出。

有两个问题 (1) 函数内部数据帧的类型是 pandas 而不是 dask,以及 (2) 当我得到函数的结果时,它也是 pandas而不是呆呆的。

@delayed 获取输入 pandas 数据帧而不是 dask 背后的逻辑是什么?我只需要使用 dask 数据帧。

这是代码:

df = pd.DataFrame({
    'height':  [6.21, 5.12, 5.85, 5.78, 5.98],
    'weight': [150, 126, 133, 164, 203]
})

df_dask = dd.from_pandas(df, npartitions=2)


@delayed
def some_function(*b):
    print('type b[0]: ' + str(type(b[0])) )
    ddf = b[0]
    return ddf

ddfout = some_function(df_dask, df_dask, df_dask)

computed = ddfout.compute()
>>> type b[0]: <class 'pandas.core.frame.DataFrame'> # this should be dask dataframe

type(computed)
>>> pandas.core.frame.DataFrame

获取 dask 数据框 ddf0 的方法是:

ddf[0]

这里不需要 delayed,API 已经对所有支持的 pandas 方法(大部分)提供了惰性操作。

Delayed 用于对常量和其他延迟值进行任意操作,不是 像数据帧这样的 dask 集合。

参见文档:https://docs.dask.org/en/stable/delayed-best-practices.html#don-t-call-dask-delayed-on-other-dask-collections;你可能想要ddf.map_partitions