2
私はパーティション化されたコレクションの内容を連想ではない集計関数と順番に集約したいので、Bag.fold
またはBag.reduction
を使用することはできません。daskバッグの内容を順番に集める方法は?
あり、この操作を行うように見えるBag.accumulate
ですが、それはだけでなく、最終的な集合体の一部のパーティションごとの中間結果でバッグを返します。
>>> import dask.bag as db
>>>
>>> def collect(acc, e):
... if acc is None:
... acc = list()
... acc.append(e)
... return acc
...
>>> b = db.from_sequence(range(10), npartitions=3)
>>> b.accumulate(collect, initial=None).compute()
[None,
[0, 1, 2, 3],
[0, 1, 2, 3],
[0, 1, 2, 3],
[0, 1, 2, 3],
[0, 1, 2, 3, 4, 5, 6, 7],
[0, 1, 2, 3, 4, 5, 6, 7],
[0, 1, 2, 3, 4, 5, 6, 7],
[0, 1, 2, 3, 4, 5, 6, 7],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]
は基本的に私はの最後の要素でのみ興味がありますaccumulate
の出力と私は中間ステップのコピーをメモリに保存したくありません。
を使用して遅延値に袋を変換することによって、比較的容易にこれを行うことができますもしそれを行うためのより多くの "控え目な"方法がなければ。 – ogrisel
このような場合には、実際には 'Bag.reduce'メソッドが必要です。一般的には、dask.delayedに切り替えると、 "dask-ish"のようになります。ユーザーが遭遇するすべての状況を予測できるツールはありません。 "use dask.delayed"はおそらく、#dask-labeled stack overflowの約30%に対する答えです。 – MRocklin