Для входных данных:
case class FeaturesInfo(feat_id: String, feat_value_en: String,
feat_value_fr: String, feat_def_key: String,
feat_def_name_en: String,feat_def_name_fr: String, feat_def_sortPriority:
String, feat_group_id: String,feat_grp_name_en: String, feat_grp_name_fr:
String)
val data:Map[Int,FeaturesInfo] = Map(0 -> FeaturesInfo("f2023","Gold","Or","Colour","Colour","couleur",
"null","fg2004","Hardware","Appareil"),
1 -> FeaturesInfo("f2052","16GB","16 Go","DeviceMemory","Internal","Interne",
"1","fg2006","Memory","Mémoire"))
//defined class FeaturesInfo
//data: scala.collection.immutable.Map[Int,FeaturesInfo]
case class jsonResult(key: Int, FEATURE_ID: String, VALUE_EN: String, VALUE_FR: String,
DEFN_KEY: String, DISPLAY_NAME_EN: String,DISPLAY_NAME_FR: String,
SORT_PRIORITY: String, feat_group_id: String,
feat_grp_name_en: String, feat_grp_name_fr: String)
Преобразовать входные данные в приведенный ниже набор данных или фрейм данных (не имеет значения):
val ds = data.toSeq.toDS().map(x => jsonResult(x._1,
x._2.feat_id, x._2.feat_value_en, x._2.feat_value_fr,
x._2.feat_def_key,x._2.feat_def_name_en,
x._2.feat_def_name_fr, x._2.feat_def_sortPriority,
x._2.feat_group_id, x._2.feat_grp_name_en, x._2.feat_grp_name_fr))
//defined class jsonResult
//ds: org.apache.spark.sql.Dataset[jsonResult]
И после успешного создания набора данных/ ДФ.Результат должен выглядеть следующим образом:
ds.selectExpr("key","to_json(struct(*)) as value").show(false)
|0 |{"key":0,"FEATURE_ID":"f2023","VALUE_EN":"Gold","VALUE_FR":"Or",
"DEFN_KEY":"Colour","DISPLAY_NAME_EN":"Colour","DISPLAY_NAME_FR":"couleur",
"SORT_PRIORITY":"null","feat_group_id":"fg2004","feat_grp_name_en":"Hardware","feat_grp_name_fr":"Appareil"}|
|1 |{"key":1,"FEATURE_ID":"f2052","VALUE_EN":"16GB","VALUE_FR":"16Go",
"DEFN_KEY":"DeviceMemory","DISPLAY_NAME_EN":"Internal","DISPLAY_NAME_FR":"Interne",
"SORT_PRIORITY":"1","feat_group_id":"fg2006","feat_grp_name_en":"Memory","feat_grp_name_fr":"Mémoire"}|