У меня есть Спарк DataframeScala - Спарк Dataframe - Преобразование строк Карта переменной
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
Мне нужно преобразовать это в переменную карты как карты [String, карта [Int, String]]
т.е.
Map["Level1", Map[1->"Hier1", 2->"Hier2", 3->"Hier3", 4->"Hier4", 5->"Hier5"]]
Map["Level2", Map[1->"Hier1", 2->"Hier2", 3->"Hier3"]]
Просьба предложить подходящий подход для достижения этой функциональности.
Моя попытка. Это работает, но некрасиво
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))
}
}
Привет, я добавил свой код в сообщение. –