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

如何在PySpark中读取XML格式的嵌套元素

PySpark读取XML嵌套层级元素方案

要在PySpark中解析XML的嵌套元素,需要使用Databricks开源的spark-xml工具包,具体操作步骤如下:


参考示例结构:
参考示例图片

前置依赖

启动PySpark前需要引入对应版本的spark-xml依赖,Spark 3.x版本通用依赖引用方式如下:

  • 交互式启动时追加参数:pyspark --packages com.databricks:spark-xml_2.12:0.16.0
  • 代码中内置依赖配置:可直接在SparkSession初始化时加入config配置

1. 初始化Spark会话

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, explode

spark = SparkSession.builder \
    .appName("NestedXMLParse") \
    .config("spark.jars.packages", "com.databricks:spark-xml_2.12:0.16.0") \
    .getOrCreate()

2. 读取XML文件并生成DataFrame

首先确定你要解析的行级节点标签(即你需要把XML中哪个标签下的内容作为DataFrame的一行),假设行级标签为item,读取代码如下:

df = spark.read \
    .format("com.databricks.spark.xml") \
    .option("rowTag", "item") # 替换为实际的行节点标签
    .load("你的XML文件路径.xml")

读取完成后可执行df.printSchema()查看自动解析的嵌套结构,确认各字段的层级路径。

3. 提取嵌套层级字段

嵌套结构为对象(StructType)

直接用.运算符即可访问子层级字段,例如要提取root.user.info.address字段:

result_df = df.select(
    col("id").alias("id"),
    col("user.info.address").alias("user_address")
)
result_df.show()

嵌套结构为数组(ArrayType)

需要先调用explode函数把数组展开为多行,再提取子字段,例如要提取root.user.order[].order_id字段:

# 展开order数组
exploded_df = df.withColumn("order_item", explode(col("user.order")))
# 提取数组内的子字段
result_df = exploded_df.select(
    col("id").alias("id"),
    col("order_item.order_id").alias("order_id")
)
result_df.show()

多层嵌套场景

多层嵌套的数组需要逐层展开,再提取目标字段,例如要提取root.user.order[].goods[].goods_name字段:

# 第一层展开order数组
step1_df = df.withColumn("order", explode(col("user.order")))
# 第二层展开goods数组
step2_df = step1_df.withColumn("goods", explode(col("order.goods")))
# 提取目标字段
result_df = step2_df.select(
    col("id").alias("id"),
    col("goods.goods_name").alias("goods_name")
)
result_df.show()

常用可选配置

配置项作用
option("ignoreNamespace", True)忽略XML中的命名空间,避免命名空间导致字段解析失败
option("attributePrefix", "_")把XML标签的属性统一加上前缀,避免和子标签重名冲突
option("rowValidationXSDPath", "xxx.xsd")传入XSD schema文件校验XML格式合法性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:45:07