pyspark的fold函数中中性零值是什么意思?

问题描述 投票:0回答:1

以下是代码片段

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. 增加 是一个运算符,用于将计量数据添加到 指数1 列。

  3. 第一个参数称为 中性零值 按照 此职位. 但它的实际含义我不知道)。

  4. 我试着用1,2,-2,10来改变零值,下面分别发生了增减2,4,-4,20。

    通过观察递增递减的规律,方程似乎是这样的 结果 = 2*中性零值 + 聚合结果。

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

点击这里获取虹膜 数据集

python python-3.x apache-spark pyspark rdd
1个回答
0
投票

中性零值实际上是操作的标识元素。在上面所示的情况下,操作是加法,因此身份元素必须是0。 如果是乘法,那么身份元素必须是1。现在为什么取中性0呢?所以,类似于fold()的还有reduce()。当把一个空集合交给reduce()时,它会抛出一个异常,而fold()已经在中性0的帮助下为一个空集合定义了异常。

类比 想象一下,它是一个变量sum,在做加法运算时初始化为0。

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

即使你传递一个空列表, 总和 被定义。

同样,对于乘法

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

更多详情请见此 文章. 阅读其中的减少和折叠功能。

© www.soinside.com 2019 - 2024. All rights reserved.