2017-01-13 19 views
0

考虑以下情况,您有两个键 - 值对的RDD,其中两个RDD中的每个键都是不同的类型。

RDD1集(矢量[字符串],字符串)是这样的:Spark:不同键类型的RDD中的键相交

(Vector("A", "B", "E"), "bla bla bla"), 
(Vector("W"), "bla bla bla bla"), 
(Vector("C", "M"), "bla bla bla bla bla"), 
(Vector("A", "V"), "bla bla bla") 
... 


RDD2 [(字符串,字符串)]是这样的:

("A", 12), 
("B", 434), 
("C", 8023), 
("D", 3454), 
... 
("N", 251) 

注:在按键RDD2来自AN(包括AN)。

所需的输出是对第一RDD1集,使得在所述载体密钥每串是整组RDD2

(Vector("A", "E", "B"), "bla bla bla"), 
(Vector("C", "M"), "bla bla bla bla bla") 


的密钥的一个子集也如果这是不可能的RDDS,我想知道其他抽象,如数据帧和数据集怎么能达到这个结果

回答

0
def myFilter(rdd1: RDD[(Vector[String],String)], rdd2: RDD[(String,String)]): RDD[(Vector[String],String)] = { 

    val keys = rdd2.map(_._1).collect() 

    val filtered = rdd1.filter{ entry => 
     entry._1.forall(str => keys.contains(str)) 
    } 
    filtered 
} 

这是不是得非常好最有效的方式,但能够完成任务。

+0

感谢您的回答。仅供参考,您可以使用val keys = rdd2.keys.collect(),它更具可读性。不过,我仍然在寻找一种方法来获得RDD转换结果或使用其他抽象的结果,这些抽象我不太熟悉,比如数据框和数据集。 – 7kemZmani

相关问题