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

将dask.bag项目分组到不同的分区中,dask,Dask,我想知道是否有人能帮助我理解Bag对象处理分区的方式。简单地说,我正在尝试将当前在包中的项目分组,以便每个组都位于自己的分区中。让我困惑的是,Bag.groupby()方法需要很多分区。分组函数不应该暗示这一点吗?例如,如果分组函数返回布尔值,则为两个分区 >>> a = dask.bag.from_sequence(range(20), npartitions = 1) >>> a.npartitions 1 >>> b = a.group

我想知道是否有人能帮助我理解
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

很明显,我遗漏了一些东西。有没有办法将
行李
项目分组到单独的分区中?

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])]

事实上,这让我很困惑。如何使每个组都位于自己的分区中?我可以重新洗牌分区(可能还会更改分区的数量)吗?尝试将每个组隔离到一个单独的分区听起来很奇怪。也许有另一种方法来完成你想做的事情。您能在最初的问题中解释一下为什么这是您的目标吗?一个典型的用例是让分区代表整个数据集的不同子集,独立处理(同时显然在分区之间共享相同的模式)。目前,分区仅作为用于优化并行化的内部构件来表示,而ApacheSpark方法也可以表示更大数据集的逻辑子集。例如,可以考虑时间戳<代码> dask.Bug < /Cord>项目,它们根据它们共享相同的日期分组到分区中。每天有一个分区有助于下游分析和存储。如果您的数据符合熊猫模型,那么您可能希望尝试dask.dataframe,它有一个适当的索引,可以相应地对数据进行排序。