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

Azure Synapse PySpark中Spark SQL提取JSON嵌套字段报错求助

解决PySpark提取字符串类型嵌套JSON字段的问题

你的问题出在JSON路径写法错误,以下是两种可行的解决方案:

方案一:直接用get_json_object提取字段

Spark SQL中推荐使用get_json_object处理字符串类型的JSON,正确路径需按嵌套层级拆分,无需给street.name加引号。执行以下SQL即可:

select Name, Salary, Company, get_json_object(Address, '$.street.name') as StreetName
from employee_data

如果坚持用你原代码里的json_extract,修正路径写法也能生效:

select Name, Salary, Company, json_extract(Address, '$.street.name') as StreetName
from employee_data

方案二:先解析JSON为结构体再提取(适合多字段复用场景)

如果后续需要多次提取Address中的其他字段,建议先将string类型的Address转换为Struct类型,操作如下:

  1. 在PySpark中定义对应Schema:
from pyspark.sql.types import StructType, StructField, StringType

address_schema = StructType([
    StructField("street", StructType([
        StructField("name", StringType()),
        StructField("number", StringType())
    ])),
    StructField("postalcode", StringType())
])

# 转换字段并更新临时视图
df_Employee = df_Employee.withColumn("Address_struct", from_json("Address", address_schema))
df_Employee.createOrReplaceTempView("employee_data")
  1. 通过SQL提取字段:
select Name, Salary, Company, Address_struct.street.name as StreetName
from employee_data

错误原因说明

你原代码中$."street.name"的写法错误,street是JSON的一级键,name是street下的二级键,不能将street.name当作一个整体键名,正确路径需用.分隔层级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:55:13