相关疑难解决方法(0)

函数式编程中的reduce和foldLeft/fold之间的区别(特别是Scala和Scala API)?

为什么Scala和像Spark和Scalding这样的框架都有reducefoldLeft?那么reduce和之间的区别是fold什么?

reduce functional-programming scala fold scalding

93
推荐指数
2
解决办法
3万
查看次数

为什么Spark需要折叠动作?

我有一个涉及fold和减少的愚蠢问题PySpark.我理解这两种方法之间的区别,但是,如果两者都需要应用函数是一个可交换的monoid,我无法弄清楚fold cannot be substituted byreduce`的一个例子.

另外,在fold使用它的PySpark实现中acc = op(obj, acc),为什么使用这个操作顺序而不是acc = op(acc, obj)?(这个第二顺序leftFold对我来说听起来更加封闭)

干杯

托马斯

reduce fold apache-spark rdd pyspark

4
推荐指数
1
解决办法
2135
查看次数

聚合概括折叠和折叠概括如何减少?

据我所知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根据我的理解,这根本不是目的- 它不是一个特征,而是实现它以便能够采用非交换函数的必要性.

这七种方法的简单例子是什么?

scala apache-spark

4
推荐指数
1
解决办法
762
查看次数