Why inconsistent results using subtraction in reduce?

前端 未结 3 1230
既然无缘
既然无缘 2021-01-19 13:50

Given the following:

val rdd = List(1,2,3)

I assumed that rdd.reduce((x,y) => (x - y)) would return -4 (i.e. <

3条回答
  •  无人及你
    2021-01-19 14:39

    From the RDD source code (and docs):

    /**
    * Reduces the elements of this RDD using the specified commutative and
    * associative binary operator.
    */
    def reduce(f: (T, T) => T): T
    

    reduce is a monoidal reduction, thus it assumes the function is commutative and associative, meaning that the order of applying it to the elements is not guaranteed.

    Obviously, your function (x,y)=>(x-y) isn't commutative nor associative.

    In your case, the reduce might have been applied this way:

    3 - (2 - 1) = 2
    

    or

    1 - (2 - 3) = 2
    

提交回复
热议问题