2017-01-13 40 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

相關問題