如何将JSON字符串数组分解为行?

我的UDF函数以字符串形式返回一个json对象数组,如何将其扩展为数据帧行?

如果不可能,还有其他方法(例如使用Struct)来实现这一目标吗?

这是我的JSON数据:

sample json
{
"items":[ {"Name":"test",Id:"1"},{"Name":"sample",Id:"2"}]
}

这就是我希望它最终像这样的结果:

test,1
sample,2
gavin_array 回答:如何将JSON字符串数组分解为行?

这个想法是spark可以读取任何 paralellized 集合,因此我们采用 string 并将其并行化并作为数据集

读取

代码 =>

import org.apache.spark.sql.functions._

val sampleJsonStr = """
     | {
     | "items":[ {"Name":"test","Id":"1"},{"Name":"sample","Id":"2"}]
     | }"""

val jsonDf = spark.read.option("multiLine","true").json(Seq(sampleJsonStr).toDS)
//jsonDf: org.apache.spark.sql.DataFrame = [items: array<struct<Id:string,Name:string>>]

// Finally we explode the json array
val explodedDf = jsonDf.
select("items").
withColumn("exploded_items",explode(col("items"))).
select(col("exploded_items.Id"),col("exploded_items.Name"))

输出 =>

scala> explodedDf.show(false)
+---+------+
|Id |Name  |
+---+------+
|1  |test  |
|2  |sample|
+---+------+
本文链接:https://www.f2er.com/3155791.html

大家都在问