2016-03-29 14 views
-4

鑑於此集合:去正規化地圖類型

("user1",Map("Gobelin" -> "2","Archers" ->"3")) 
("user2",Map("Giant" -> "1")) 

我想要的輸出看起來像這樣

("user1","Gobelin","2") 
("user1","Archers","3") 
("user2","Giant","1") 

我怎樣才能達致這與火花?

回答

1

最有可能你正在尋找flatMapValues

val rdd = sc.parallelize(
    ("user1",Map("Gobelin" -> "2","Archers" ->"3")) :: 
    ("user2",Map("Giant" -> "1")) :: Nil) 

rdd.flatMapValues(identity[Map[String, String]]) 

explode

rdd.toDF.select($"_1", explode($"_2")).as[(String, String, String)].rdd