在Spark中foldLeft或foldRight等效?

zun*_*ior 9 scala fold apache-spark spark-streaming rdd

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

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

Dan*_*don 8

使用聚合而不是reduce.它还允许您指定类型B的"零"值和类似于您想要的函数:(B,A)=> B.请注意,您还需要合并在单独的执行程序上完成的单独聚合,因此a( B,B)=> B功能也是必需的.

或者,如果您希望此聚合作为副作用,则选项是使用累加器.特别是,可累积类型允许结果类型与累积类型不同.

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