如何获取数组中存在的Rdd值?

时间:2018-09-13 17:23:27

标签: scala apache-spark

我有Rdd[(Int, Double)]  还有一个array[Int],我也想只用数组中存在的Rdd[(Int, Double)]来获得一个新的Int

例如,如果我的array[0, 1, 2]而我的rdd(1, 4.2), (5, 4.3),我只想将rdd作为输出(1, 4.2) < / p>

我正在考虑将filter与用于迭代数组,进行比较并返回true/false的函数一起使用,但是我不确定这是否是spark的逻辑。

类似的东西:

val newrdd = rdd.filter(x => f(x._1, array)) 

其中

f(x:Int, y:Array[In]): Boolean ={
   val z = false 
   for (a<-0 to y.length-1){
         if (x == y(a)){
            z = true
            z}
       z

}

2 个答案:

答案 0 :(得分:1)

//输入rdd

val rdd = sc.parallelize(Seq((1,4.2),(5,4.3)))

// array,转换为rdd

val arrRdd = sc.parallelize(Array(0,1,2))

//将rdd和arrRdd转换为数据帧

val arrDF = arrRdd.toDF()
val df = rdd.toDF()

//加入并再次将其转换为rdd

df.join(arrDF,df.col("_1") === arrDF.col("value"),"leftsemi").rdd.collect

//输出数组([1,4.2])

答案 1 :(得分:0)

val acceptableValues = array.toSet
rdd.filter { case (x, _) => acceptableValues(x) }