如何推断 Spark SQL 中序列化 JSON 列的架构?

Har*_*hit 5 json apache-spark apache-spark-sql pyspark

我有一个表,其中有 1 列是序列化的 JSON。我想在此 JSON 列上应用架构推断。我不知道作为 JSON 提取输入的模式(例如:from_json 函数)。

我可以在 Scala 中这样做

val contextSchema = spark.read.json(data.select("context").as[String]).schema
val updatedData = data.withColumn("context", from_json(col("context"), contextSchema))
Run Code Online (Sandbox Code Playgroud)

如何将此解决方案转换为纯 Spark-SQL?

Shu*_*Shu 2

用于生成架构spark-sqltoDDL然后使用 中的架构from_json

Example:

df.show(10,false)
//+---+-------------------+
//|seq|json               |
//+---+-------------------+
//|1  |{"id":1,"name":"a"}|
//+---+-------------------+

val sch=spark.read.json(df.select("json").as[String]).schema.toDDL
//sch: String = `id` BIGINT,`name` STRING

df.createOrReplaceTempView("tmp")

spark.sql(s"""select seq,jsn.* from (select *,from_json(json,"$sch") as jsn  from tmp)""").
show(10,false)
//+---+---+----+
//|seq|id |name|
//+---+---+----+
//|1  |1  |a   |
//+---+---+----+
Run Code Online (Sandbox Code Playgroud)