2015-09-03 103 views
0

我有一個形式爲RDD[(String, Array[String])]的PairRDD。我想要將這些值展平,以便我有一個RDD[(String, String)],其中第一個RDD的Array [String]中的每個元素都將成爲第二個RDD中的專用元素。如何將(String,Array [String])的RDD拆分爲數組中的每個項目的(String,String)的RDD?

例如,我的第一個RDD具有以下元素:

("a", Array("x", "y")) 
("b", Array("y", "z")) 

我想結果是這樣的:

("a", "x") 
("a", "y") 
("b", "y") 
("b", "z") 

我怎樣才能做到這一點? flatMapValues(f: Array[String] => TraverableOnce[String])似乎是在這裏正確的選擇,但我需要用什麼作爲參數f

+0

只要做'rdd.flatMapValues(x => x)' – ale64bit

+0

@kaktusito正確的感謝;我更新了這個問題,因爲我實際上正在尋找傳入flatMapValues()的參數。你已經乾淨了。 – Carsten

+0

@Carsten我會使用'identity'而不是'x => x'。 scala編譯器可能足夠聰明,可以認識到這是「身份」,但也許不是,然後你創建一個新的對象。 – 2rs2ts

回答

4

爲了達到預期的效果,這樣做:

val rdd1: RDD[(Any, Array[Any])] = ... 
val rddFlat: RDD[(Any, Any)] = rdd1.flatMapValues(identity[Array[Any]]) 

結果看起來像一個在問題提出的要求。

+1

protip:它應該是一個Wiki的答案,因爲您只是收集了評論。 –

+0

@JacekLaskowski很高興將答案標記爲Wiki答案,但我似乎沒有必要的權限。 – Carsten

相關問題