以下是代码片段
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 列。
第一个参数称为 中性零值 按照 此职位. 但它的实际含义我不知道)。
我试着用1,2,-2,10来改变零值,下面分别发生了增减2,4,-4,20。
通过观察递增递减的规律,方程似乎是这样的 结果 = 2*中性零值 + 聚合结果。
类似的zeroValue也可以在foldByKey函数中看到。
点击这里获取虹膜 数据集
中性零值实际上是操作的标识元素。在上面所示的情况下,操作是加法,因此身份元素必须是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
更多详情请见此 文章. 阅读其中的减少和折叠功能。