我有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
}
答案 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) }