Как получить значения Rdd, которые существуют в массиве? - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть Rdd[(Int, Double)] и array[Int], и я хочу получить новый Rdd[(Int, Double)] только с теми Int, которые существуют и в массиве.

Например, если мой array равен [0, 1, 2] и мой rdd равен (1, 4.2), (5, 4.3), я хочу получить в качестве вывода rdd только (1, 4.2)

Я думаю об использовании 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

}

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018
val acceptableValues = array.toSet
rdd.filter { case (x, _) => acceptableValues(x) }
0 голосов
/ 13 сентября 2018

Попробуйте это:

rdd.filter(x => Array(0,1,2).contains(x._1)).collect.foreach(println)

Выход:

(1,4.2) 
0 голосов
/ 13 сентября 2018

// Входной массив rdd

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

//, преобразование в rdd

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

// преобразование rdd и arrRdd в фрейм данных

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

// do присоединиться и снова преобразовать его в rdd

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

// output Array ([1,4.2])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...