我想知道是否有人可以帮助我理解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
个项目分组到不同的分区中?
答案 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])]