【问题标题】:What is the meaning of neutral zero value in the fold function of pyspark?pyspark的fold函数中的中性零值是什么意思?
【发布时间】:2020-02-07 16:05:53
【问题描述】:

这里是代码sn-p

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 是在 index 1 列中添加度量数据的运算符。

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

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

    通过观察递增/递减的模式,
    这个等式看起来像 result = 2*neutral_zero_value + aggregation_result

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

点击此处获取鸢尾花Dataset

【问题讨论】:

    标签: python python-3.x apache-spark pyspark rdd


    【解决方案1】:

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

    类比
    把它想象成一个变量 sum,它被初始化为 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
    

    有关更多详细信息,请参阅此article。阅读其中的 reduce 和 fold 函数。

    【讨论】:

      猜你喜欢
      • 2014-09-03
      • 2015-09-25
      • 1970-01-01
      • 2022-10-01
      • 2011-05-27
      • 2012-05-25
      • 2015-07-11
      • 2011-01-21
      相关资源
      最近更新 更多