我有一个Spark Scala的问题,它得到每个邻接的两个元素差值大于阈值的值,我创建一个这样的新RDD:
[2,3,5,8,19,3,5,89,20,17]
我想减去每个两个相邻元素:
a.apply(1)-a.apply(0) ,a.apply(2)-a.apply(1),…… a.apply(a.lenght)-a.apply(a.lenght-1)
如果结果大于10的阈值,则输出集合,如下所示:
[19,89]
如何使用RDD中的scala执行此操作?
答案 0 :(得分:1)
如果您有数据
val data = Seq(2,3,5,8,19,3,5,89,20,17)
您可以将rdd创建为
val rdd = sc.parallelize(data)
您可以通过以下方式实现您的目标
import org.apache.spark.mllib.rdd.RDDFunctions._
val finalrdd = rdd
.sliding(2)
.map(x => (x(1), x(1)-x(0)))
.filter(y => y._2 > 10)
.map(z => z._1)
做
finalrdd.foreach(println)
应该打印
19
89
答案 1 :(得分:0)
你可以从原始数据帧创建另一个RDD并压缩那两个RDD,它创建一个像(2,3)(3,5)(5,8)这样的元组,如果它大于10则过滤减去的结果
val rdd = spark.sparkContext.parallelize(Seq(2,3,5,8,19,3,5,89,20,17))
val first = rdd.first()
rdd.zip(rdd.filter(r => r != first))
.map( k => ((k._2 - k._1), k._2))
.filter(k => k._1 > 10 )
.map(t => t._2).foreach(println)
希望这有帮助!