6

多くのファイルに分割された多くのテーブルの結果を個別に計算する、簡単に並列化できるタスクがあります。遅延リストまたは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] を取得したいと思います。これは、遅延コレクション docsに基づいて期待されるものです。

私の本当の問題については、実際には HDF5 ファイルのテーブルを計算したいと思いますが、それを使用できることを考えるとdask.get()、遅延/ダスク データフレーム ステップをすでに指定していると確信しています。

辞書に直接結果をもたらすソリューションに興味がありますが、(キー、値) タプルのリストを に返すこともできますdict()。これは、おそらく大きなパフォーマンス ヒットではありません。

4

1 に答える 1

8

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)
于 2016-05-24T01:11:22.500 に答える