1 要实现的功能
2 代码demo
// 1 获取SparkSession
val spark: SparkSession = SparkSession
.builder()
.appName(s"${this.getClass.getSimpleName}")
.master("local[3]")
.getOrCreate()
import spark.implicits._
// 2 构造数据源
val arr = Array((1, "11", "101"), (1, "22", "202"), (2, "aa", "101"), (2, "bb", "202"))
val df = spark.sparkContext.makeRDD(arr).toDF("id", "key", "value")
df.show()
// 3 转成需要的格式("key":value---> "key01":value01,"key02":value02--->{"key01":value01,"key02":value02})
val res_df = df
// "key":value
.withColumn("key_value", concat(lit("\""), $"key", lit("\":"), $"value"))
// "key01":value01,"key02":value02
.groupBy("id")
.agg(concat_ws(",", collect_list("key_value")).as("key_values"))
// {"key01":value01,"key02":value02}
.select($"id", concat(lit("{"), $"key_values", lit("}")).as("key_values"))
res_df.show()