我如何实际获取dask来计算基于延迟或基于容器容器的结果列表?

时间:2016-05-24 00:56:17

标签: python dask

我有一个简单的可并行化的计算结果任务,分别用于许多文件中的许多表。我可以构造延迟或dask.dataframe列表(并且还尝试过,例如dict),我无法获得所有计算结果(我可以使用.get()从dask图形样式字典中获得单独的结果,但再次无法轻易计算所有结果)。这是一个最小的例子:

>>> 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],这是我期望的delayed collections docs

对于我的真正问题,我实际上想在HDF5文件中的表上进行计算,但考虑到我可以使用dask.get(),我很确定我指定了我的已经延迟/完成数据帧步骤。

我会对直接导致字典的解决方案感兴趣,但我也可以将(键,值)元组列表返回给dict(),这可能不是一个巨大的性能损失。

1 个答案:

答案 0 :(得分:3)

Compute将许多集合作为单独的参数。尝试按如下方式展开你的论点:

In [1]: import dask.dataframe as dd

In [2]: import pandas as pd

In [3]: df = dd.from_pandas(pd.DataFrame({'a': [1,2]}), npartitions=1)

In [4]: numbers = [df['a'].mean() for _ in range(2)]

In [5]: dd.compute(*numbers)  # note the *
Out[5]: (1.5, 1.5)

或者,可能更常见:

In [6]: dd.compute(df.a.mean(), df.a.std())
Out[6]: (1.5, 0.707107)