dask.bag.Bag.fold

dask.bag.Bag.fold

Bag.fold(binop, combine=None, initial=_NoDefault.no_default, split_every=None, out_type=<class 'dask.bag.core.Item'>)[源代码]

可并行化归约

Fold 类似于内置函数 reduce,只不过它是并行工作的。Fold 接受两个二元操作函数,一个用于减少我们数据集的每个分区,另一个用于组合分区之间的结果。

  1. binop: 在每个分区中进行归约的二元运算符

  2. combine: 用于组合二进制操作结果的二进制运算符

顺序上,这看起来如下:

>>> intermediates = [reduce(binop, part) for part in partitions]  
>>> final = reduce(combine, intermediates)  

如果只给出一个函数,那么它将同时用于 binopcombine 函数,如下例所示,用于计算总和:

>>> def add(x, y):
...     return x + y
>>> import dask.bag as db
>>> b = db.from_sequence(range(5))
>>> b.fold(add).compute()
10

在完整形式中,我们既提供二元运算符,也提供它们的默认参数

>>> b.fold(binop=add, combine=add, initial=0).compute()
10

更复杂的二元运算符也是可以实现的

>>> def add_to_set(acc, x):
...     ''' Add new element x to set acc '''
...     return acc | set([x])
>>> b.fold(add_to_set, set.union, initial=set()).compute()
{0, 1, 2, 3, 4}

参见

Bag.foldby