我实际上如何获得dask来计算延迟或基于dask-container的结果的列表?
作者:互联网
我有一个微不足道的可并行化任务,可以为拆分成多个文件的多个表独立地计算结果.我可以构造延迟列表或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()一起使用,我很确定我已经在指定我的deferd / dask dataframe步骤了.
我对直接生成字典的解决方案感兴趣,但我也可以将(键,值)元组列表返回给dict(),这可能对性能没有太大影响.
解决方法:
计算将许多集合作为单独的参数.尝试按如下方式列出您的论点:
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)
标签:dask,python 来源: https://codeday.me/bug/20191118/2029545.html