根据RDD2

时间:2017-09-21 23:46:13

标签: scala apache-spark rdd

我有以下格式的2个RDDS

RDD1     178,1
         156,1
          23,2
RDD2     
         34
         178
         156

现在我想根据rdd2中的值过滤rdd1,即如果在rdd1和rdd2中存在178那么它应该从rdd1返回那些元组。

我试过了

val out = reversedl1.filter({ case(x,y) => x.contains(lines)}) 

其中lines是我的第二个rdd,reversel1是第一个,但它不起作用

我也试过

val abce = reversedl1.subtractByKey(lines)
val defg = reversedl1.subtractByKey(abce)

这也行不通。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您可以将rdd2转换为键值对,然后在键上加入rdd1

val rdd1 = sc.parallelize(Seq((178, 1), (156, 1), (23, 2)))
val rdd2 = sc.parallelize(Seq(34, 178, 156))

(rdd1.join(rdd2.distinct().map(k => (k, null)))           
// here create a dummy value to form a pair wise RDD so you can join
     .map{ case (k, (v1, v2)) => (k, v1) }         // drop the dummy value   
 ).collect
// res11: Array[(Int, Int)] = Array((156,1), (178,1))