上下文: Dask文檔明確指出,Bag.take()
只會從第一個分區收集。但是,使用過濾器時,可能會發生第一個分區爲空,而其他分區不是。如何在使用dask時避免使用`Bag.take(n)`得到空的結果?
問: 是否可以使用Bag.take()
,使其從一個足夠數量的分區收集收集n
項目(或最大可用其小於n
)。
上下文: Dask文檔明確指出,Bag.take()
只會從第一個分區收集。但是,使用過濾器時,可能會發生第一個分區爲空,而其他分區不是。如何在使用dask時避免使用`Bag.take(n)`得到空的結果?
問: 是否可以使用Bag.take()
,使其從一個足夠數量的分區收集收集n
項目(或最大可用其小於n
)。
你可以做類似如下:
from toolz import take
f = lambda seq: list(take(n, seq))
b.reduction(f, f)
這抓住每個分區的第n個元素,收集它們放在一起,然後取結果的第n個元素。
這沒有奏效!使用工具版本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
啊,酸洗很奇怪。也許使用'f = lambda seq:list(take(n,seq))'和'b.reduction(f,f)'而不是 – MRocklin
這是做到了,是的,我已經讀過鹹菜的魅力,令人震驚的是它現在已經有幾年的時間了。 – JMann
感謝您在發佈之前閱讀文檔!這讓我高興:) – MRocklin