Python 在使用dask时,如何避免使用'Bag.take(n)`产生空结果?

Python 在使用dask时,如何避免使用'Bag.take(n)`产生空结果?,python,bag,dask,Python,Bag,Dask,背景: Dask文档明确指出,Bag.take()将只从第一个分区收集数据。但是,当使用过滤器时,第一个分区可能是空的,而其他分区则不是空的 问题: 是否可以使用Bag.take()从足够多的分区收集n项(或小于n的最大可用项)。您可以执行以下操作: from toolz import take f = lambda seq: list(take(n, seq)) b.reduction(f, f) 这将获取每个分区的前n个元素,将它们收集在一起,然后获取结果的前n个元素。感谢您在发布之前阅读

背景: Dask文档明确指出,
Bag.take()
将只从第一个分区收集数据。但是,当使用过滤器时,第一个分区可能是空的,而其他分区则不是空的

问题:
是否可以使用
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(范围(20),npartitions=4)
tb.reduction(take(2),take(2)
给出PicklingError:无法pickle类型的对象-我非常感谢您的帮助..啊,pickle很奇怪。可能使用
f=lambda seq:list(take(n,seq))
b.reduction(f,f)
相反,这就成功了。是的,我在别处读到过关于泡菜魅力的文章,令人震惊的是,这篇文章出自一篇已有几年历史的帖子。