You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala Spark解析JSON提取同名City列首值为null问题求助

问题根因

你在定义JSON解析的StructType时重复声明了两个同名City字段,Spark的from_json函数处理JSON数据时,对于JSON中仅存在一个的同名键,只会将值赋值给schema中最后一个匹配到的同名字段,前面声明的同名字段会默认填充null,这就是第一列City返回空的直接原因。

修正方案

不要在解析schema中定义重复的City字段,先按正常逻辑解析出单个City字段,查询时主动复制一列并重命名为City即可,修正代码如下:

val jsonString="""{"Zipcode":704,"ZipCodeType":"STANDARD","City":"PARC PARQUE","State":"PR"}"""
val data = Seq((1, jsonString))
import spark.implicits._
val df=data.toDF("id","value")

import org.apache.spark.sql.functions.from_json
import org.apache.spark.sql.types.{StringType, StructType}
// 解析用schema仅声明1次City字段
val parseSchema = new StructType()
  .add("Zipcode", StringType, true)
  .add("ZipCodeType", StringType, true)
  .add("City", StringType, true)

val parsedDf = df.withColumn("value", from_json(col("value"), parseSchema))
// 查询时主动复制一列City,两个列都保留City命名
val resultDf = parsedDf.select(
  col("id"),
  col("value.Zipcode"),
  col("value.ZipCodeType"),
  col("value.City").alias("City"),
  col("value.City").alias("City")
)
resultDf.show()

运行上述代码即可得到你期望的结果,两个City列均返回PARC PARQUE。

内容的提问来源于stack exchange,提问作者Sofia Sehgal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 01:27:03