2015-11-05 43 views
0

我使用的Spark 1.5.1使用Scala 2.10.5星火1.5.1,斯卡拉2.10.5:如何擴大的RDD [數組[字符串],矢量]

我有一個RDD[Array[String], Vector]每個在RDD的元素:

  • 我想借此在Array[String]每個String,並與Vector結合起來 創建元組(String, Vector),這一步會導致創建幾個元組從的每個元素初始RDD

我們的目標是通過建立元組的RDD來結束:RDD[(String, Vector)],這RDD包含在上一步中創建的所有元組。

謝謝

回答

3

考慮一下:

rdd.flatMap { case (arr, vec) => arr.map((s) => (s, vec)) } 

(第一flatMap讓你得到一個RDD[(String, Vector)]爲輸出而不是一個map,它會給你一個RDD[Array[(String, Vector)]]

1

你試過嗎?

// rdd: RDD[Array[String], Vector] - initial RDD 
val new_rdd = rdd 
    .flatMap { 
    case (array: Array[String], vec: Vector) => array.map(str => (str, vec)) 
    } 

玩具爲例(我在火花shell中運行它):

val rdd = sc.parallelize(Array((Array("foo", "bar"), 100), (Array("one", "two"), 200))) 
val new_rdd = rdd 
    .map { 
    case (array: Array[String], vec: Int) => array.map(str => (str, vec)) 
    } 
    .flatMap(arr => arr) 
new_rdd.collect 
res14: Array[(String, Int)] = Array((foo,100), (bar,100), (one,200), (two,200))