因为我有一个集合:
List(1, 3,-1, 0, 2, -4, 6)
它很容易分类为:
List(-4, -1, 0, 1, 2, 3, 6)
然后我可以通过计算6-3,3-2,2-1,1-0等构建一个新的集合,如下所示:
for(i <- 0 to list.length -2) yield { list(i + 1) - list(i) }
并得到一个矢量:
Vector(3, 1, 1, 1, 1, 3)
也就是说,我想让下一个元素减去当前元素.
但是如何在Spark上的RDD中实现这个呢?
我知道这个系列:
List(-4, -1, 0, 1, 2, 3, 6)
集合中会有一些分区,每个分区都是有序的,我可以对每个分区进行类似的操作,并在每个分区上收集结果吗?
最有效的解决方案是使用sliding
方法:
import org.apache.spark.mllib.rdd.RDDFunctions._ val rdd = sc.parallelize(Seq(1, 3,-1, 0, 2, -4, 6)) .sortBy(identity) .sliding(2) .map{case Array(x, y) => y - x}