2016-07-07 5 views
2

コンテキスト: Daskドキュメントでは、Bag.take()が最初のパーティションからのみ収集されることを明確に述べています。ただし、フィルタを使用すると、最初のパーティションは空で、それ以外のパーティションは空になることがあります。daskを使うときに `Bag.take(n)`で空の結果を避けるには?

質問: はそれはそれはnアイテム(またはnよりも小さい可能な最大)を収集するために、パーティションの十分な数から集めるようにBag.take()を使用することが可能です。

+0

投稿する前にドキュメントをお読みいただきありがとうございます。これは私を幸せにします:) – MRocklin

答えて

1

次のような何かができる:

from toolz import take 
f = lambda seq: list(take(n, seq)) 
b.reduction(f, f) 

これは、各パーティションの最初のn個の要素をつかむ一緒にそれらすべてを収集し、その結果の最初のn個の要素を取ります。

+0

これはうまくいきませんでした!ツールバージョン0.8.0、dask 0.10、python 3.5.2を使用してください。 'tb = db.from_sequence(範囲(20)、nパーティション= 4)' 'tb.reduction(take(2)、take(2)' PicklingError:のオブジェクトをpickleできませんitertools.islice '> - あなたの助けに感謝します.. – JMann

+0

ああ、酸洗は奇妙です。おそらく 'f = lambda seq:list(take(n、seq))'代わりに「b.reduction(f、f)」と書かれています。 – MRocklin

+0

これはそうでした。そして、はい、私はピクルスの魅力の他の場所を読みました。 – JMann

関連する問題