pyspark 折叠函数中中性零值的含义是什么?



这是代码片段

from operator import add
iris1 = sc.textFile("./dataset/iris_site.csv")
iris1_split = iris1.map(lambda var1: var1.split(","))
iris1_split.map(lambda col:float(col[0])).fold(0,add)

以下是我对折叠函数的理解:

  1. 它用于聚合

  2. add是用于在索引 1列中添加度量值数据的运算符。

  3. 根据这篇文章,第一个参数被称为中性零值。 (但它实际上意味着什么我不知道。

  4. 我尝试用 1、2、-2、10 更改零值,然后分别发生以下递增和递减 2、4、-4、20。

    通过观察递增/递减的模式,
    方程似乎结果= 2*neutral_zero_value + aggregation_result

类似的零值也可以在foldByKey函数中看到。

单击此处获取虹膜数据集

中性零值实际上是操作的标识元素。在上面显示的情况下,操作是加法,因此单位元素必须为 0。如果是乘法,那么单位元素必须是 1。
现在为什么它采用中性零? 因此,与 fold(( 类似,有 reduce((。在将空集合提供给 reduce(( 时,它会抛出一个异常,其中 fold(( 已经在中性零的帮助下为空集合定义了。

类比
将其想象成一个变量总和,该变量总和初始化为 0 以执行加法操作。

sum_ = 0 # here 0 is an identity element for addition
collection = [1,2,4,5]
for elem in collection:
sum_ += elem

即使传递空列表,也会定义sum_

同样,对于乘法

prod = 1 # here 1 is an identity element for multiplication
collection = [1,2,4,5]
for elem in collection:
prod *= elem

有关更多详细信息,请参阅此文章。阅读其中的减少和折叠功能。

最新更新