我有以下格式的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)
这也行不通。
有什么建议吗?
答案 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))