2016-07-07 54 views
2

上下文: Dask文檔明確指出,Bag.take()只會從第一個分區收集。但是,使用過濾器時,可能會發生第一個分區爲空,而其他分區不是。如何在使用dask時避免使用`Bag.take(n)`得到空的結果?

問: 是否可以使用Bag.take(),使其從一個足夠數量的分區收集收集n項目(或最大可用其小於n)。

+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(range(20),npartitions = 4)' 'tb.reduction(take(2),take(2)' 給出 PicklingError:Can not pickle type of class - 我很感謝你的幫助。 – JMann

+0

啊,酸洗很奇怪。也許使用'f = lambda seq:list(take(n,seq))'和'b.reduction(f,f)'而不是 – MRocklin

+0

這是做到了,是的,我已經讀過鹹菜的魅力,令人震驚的是它現在已經有幾年的時間了。 – JMann

相關問題