将dask.bag项分组到不同的分区中

时间:2017-02-22 17:14:25

标签: dask

我想知道是否有人可以帮助我理解Bag对象处理分区的方式。简而言之,我正在尝试对当前位于Bag的项目进行分组,以便每个组都在其自己的分区中。令我困惑的是Bag.groupby()方法要求许多分区。分组功能不应该隐含这一点吗?例如,如果分组函数返回布尔值,则为两个分区?

>>> a = dask.bag.from_sequence(range(20), npartitions = 1)
>>> a.npartitions
1
>>> b = a.groupby(lambda x: x % 2 == 0)
>>> b.npartitions
1

我显然在这里遗漏了一些东西。有没有办法将Bag个项目分组到不同的分区中?

1 个答案:

答案 0 :(得分:0)

Dask包可能会在一个分区中放置几个​​组。

In [1]: import dask.bag as db

In [2]: b = db.range(10, npartitions=3).groupby(lambda x: x % 5)

In [3]: partitions = b.to_delayed()

In [4]: partitions
Out[4]: 
[Delayed(('groupby-collect-f00b0aed94fd394a3c61602f5c3a4d42', 0)),
 Delayed(('groupby-collect-f00b0aed94fd394a3c61602f5c3a4d42', 1)),
 Delayed(('groupby-collect-f00b0aed94fd394a3c61602f5c3a4d42', 2))]

In [5]: for part in partitions:
   ...:     print(part.compute())
   ...:     
[(0, [0, 5]), (3, [3, 8])]
[(1, [1, 6]), (4, [4, 9])]
[(2, [2, 7])]