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 接受两个二元操作函数,一个用于减少我们数据集的每个分区,另一个用于组合分区之间的结果。binop
: 在每个分区中进行归约的二元运算符combine
: 用于组合二进制操作结果的二进制运算符
顺序上,这看起来如下:
>>> intermediates = [reduce(binop, part) for part in partitions] >>> final = reduce(combine, intermediates)
如果只给出一个函数,那么它将同时用于
binop
和combine
函数,如下例所示,用于计算总和:>>> 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}
参见