Spark 中的 foldLeft 或 foldRight 等价物?

foldLeft or foldRight equivalent in Spark?

在 Spark 的 RDD 和 DStream 中,我们有 'reduce' 函数用于将整个 RDD 转换为一个元素。但是 reduce 函数需要 (T,T) => T 但是,如果我们想在 Scala 中减少一个列表,我们可以使用 foldLeft 或 foldRight 类型 (B)( (B,A) => B) 这非常有用,因为您开始折叠时使用的类型不同于列表中的类型.

Spark 有没有办法做类似的事情?我可以从一个不同类型的值开始,然后是 RDD 本身中的元素

使用 aggregate 而不是减少。它还允许您指定 B 类型的 "zero" 值和您想要的函数:(B,A) => B。请注意,您还需要合并在单独的执行程序上完成的单独聚合,因此a (B, B) => 还需要B函数。

或者,如果您希望将此聚合作为副作用,一个选项是使用累加器。特别是,accumulable type 允许结果类型与累积类型不同。

此外,如果您甚至需要对键值 RDD 执行相同操作,请使用 aggregateByKey