为什么Scala和像Spark和Scalding这样的框架都有reduce和foldLeft?那么reduce和之间的区别是fold什么?
我有一个涉及fold和减少的愚蠢问题PySpark.我理解这两种方法之间的区别,但是,如果两者都需要应用函数是一个可交换的monoid,我无法弄清楚fold cannot be substituted byreduce`的一个例子.
另外,在fold使用它的PySpark实现中acc = op(obj, acc),为什么使用这个操作顺序而不是acc = op(acc, obj)?(这个第二顺序leftFold对我来说听起来更加封闭)
干杯
托马斯
据我所知aggregate,fold这是一种概括,反过来又是一种概括reduce.
类似地combineByKey,aggregateByKey这是一种概括,其反过来又是概括,foldByKey而反过来又是概括reduceByKey.
但是,我很难找到这七种方法中的每种方法的简单例子,而这些方法又可以仅由它们表达,而不是它们不那么通用的版本.例如,我找到了http://blog.madhukaraphatak.com/spark-rdd-fold/给出一个例子fold,但我也能够reduce在相同的情况下使用.
到目前为止我发现了什么:
fold只要是关联的,而一个reduce必须是可交换另外:/sf/answers/1761115331/(不过,我还是不知道有什么好的简单例如.)在/sf/answers/1864514991/中,我读到折叠需要两个属性才能保持...fold结束reduce),如"添加所有元素并添加3"并使用3作为零值,但这会产生误导,因为每个分区都会添加3个,而不仅仅是一旦.此外,fold根据我的理解,这根本不是目的- 它不是一个特征,而是实现它以便能够采用非交换函数的必要性.这七种方法的简单例子是什么?