地図に行を変換DATAFRAMEスカラ - スパークDATAFRAMEは - 私はスパークを持っている変数
私は[[INT、文字列]文字列、地図]地図などの地図の変数にこれを変換する必要が
Level Hierarchy Code -------------------------- Level1 Hier1 1 Level1 Hier2 2 Level1 Hier3 3 Level1 Hier4 4 Level1 Hier5 5 Level2 Hier1 1 Level2 Hier2 2 Level2 Hier3 3
すなわち
Map["Level1", Map[1->"Hier1", 2->"Hier2", 3->"Hier3", 4->"Hier4", 5->"Hier5"]]
Map["Level2", Map[1->"Hier1", 2->"Hier2", 3->"Hier3"]]
この機能を実現するには、適切な方法を提案してください。
私の試み。それは動作しますが、あなたがmapGroups
でdataframe.groupByKey("level")
followeedを使用する必要が醜い
val level_code_df =master_df.select("Level","Hierarchy","Code").distinct()
val hierarchy_names = level_code_df.select("Level").distinct().collect()
val hierarchy_size = hierarchy_names.size
var hierarchyMap : scala.collection.mutable.Map[String, scala.collection.mutable.Map[Int,String]] = scala.collection.mutable.Map[String, scala.collection.mutable.Map[Int,String]]()
for(i <- 0 to hierarchy_size.toInt-1)
println("names:"+hierarchy_names(i)(0))
val name = hierarchy_names(i)(0).toString()
val code_level_map = level_code_df.rdd.map{row => {
if(name.equals(row.getAs[String]("Level"))){
Map(row.getAs[String]("Code").toInt -> row.getAs[String]("Hierarchy"))
} else
Map[Int, String]()
}}.reduce(_++_)
hierarchyMap = hierarchyMap + (name -> (collection.mutable.Map() ++ code_level_map))
}
}
こんにちは、自分のコードを投稿に追加しました。 –