我有一个简单的可并行化任务,即为跨多个文件拆分的许多表独立计算结果。我可以构建延迟或 dask.dataframe 列表(并且也尝试过使用,例如 dict),但我无法获得所有要计算的结果(我可以使用 dask 图形样式字典获取单个结果.get()
,但同样不能轻松计算所有结果)。这是一个最小的例子:
>>> df = dd.from_pandas(pd.DataFrame({'a': [1,2]}), npartitions=1)
>>> numbers = [df['a'].mean() for _ in range(2)]
>>> dd.compute(numbers)
([<dask.dataframe.core.Scalar at 0x7f91d1523978>,
<dask.dataframe.core.Scalar at 0x7f91d1523a58>],)
相似地:
>>> from dask import delayed
>>> @delayed
... def mean(data):
... sum(data) / len(data)
>>> delayed_numbers = [mean([1,2]) for _ in range(2)]
>>> dask.compute(delayed_numbers)
([Delayed('mean-0e0a0dea-fa92-470d-b06e-b639fbaacae3'),
Delayed('mean-89f2e361-03b6-4279-bef7-572ceac76324')],)
我想得到 [3, 3],这是我基于延迟的集合文档所期望的。
对于我真正的问题,我实际上想在 HDF5 文件中的表上进行计算,但鉴于我可以使用它,dask.get()
我很确定我已经指定了我的 deferred / dask 数据帧步骤。
我会对直接生成字典的解决方案感兴趣,但我也可以只将 (key, value) 元组列表返回到dict()
,这可能不会对性能造成巨大影响。