Scala Spark 映射成对的 RDD 元素

Scala Spark map by pairs of RDD elements

在 Spark 中遍历 RDD 获取前一个元素和当前元素的最佳实践是什么?与 reduce 函数相同,但 returning 和 RDD 而不是单个值。

例如,给定:

val rdd = spark.sparkContext.textFile("date_values.txt").
          map {
             case Array(val1, val2, val3) =>
                Element(DateTime.parse(val1), val2.toDouble)
          }

输出应该是一个新的 RDD,具有不同的 val2 属性:

Diff(date, current.val2 - previous.val2)

map函数我只能得到当前元素,用reduce函数我只能return1个元素而不是RDD。 我可以使用 foreach 函数在时间变量中保存以前的值,但我认为这不会遵循 Scala-Spark 指南。

您认为最合适的处理方式是什么?

Dominic Egger 在此线程中给出的答案正是我要找的:

Spark find previous value on each iteration of RDD

import org.apache.spark.mllib.rdd.RDDFunctions._
sortedRDD.sliding(2)

或使用开发人员 API:

val l = sortedRdd.zipWithIndex.map(kv => (kv._2, kv._1))
val r = sortedRdd.zipWithIndex.map(kv => (kv._2-1, kv._1))
val sliding = l.join(r)