Databricks Delta Lake读取JSON后提取members数组指定字段方法
问题原因
你遇到的报错是因为 data.members 是数组类型,Spark SQL 中的 * 展开语法仅支持作用于结构体类型,无法直接对数组执行展开操作,所以会触发类型不匹配的报错。
解决方案(纯SQL实现)
使用 LATERAL VIEW EXPLODE 先将数组成员拆分为独立行,再提取对应字段即可,写法如下:
%sql SELECT member.id AS id, member.name AS name, member.profile AS profile FROM vw_TestView LATERAL VIEW EXPLODE(data.members) t AS member -- 如果需要限制返回行数避免结果过大,可以加 LIMIT 语句,比如 LIMIT 1000
如果需要保留 members 数组为空的原始行,可以将 EXPLODE 替换为 EXPLODE_OUTER。
可选PySpark实现方案
如果你更习惯用PySpark写逻辑,等效实现如下:
from pyspark.sql.functions import explode member_df = spark.table("vw_TestView") \ .select(explode("data.members").alias("member")) \ .select("member.id", "member.name", "member.profile") # 可按需将结果写入临时视图供后续SQL查询使用 member_df.createOrReplaceTempView("vw_member_info")
内容的提问来源于stack exchange,提问作者Mr.Human
相关产品推荐
相关产品推荐

