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

如何在PySpark DataFrame中用XPath提取XML嵌套结构为字符串

解决PySpark提取XML完整节点字符串的问题

问题原因

你之前用xpath函数尝试提取<description>内容失败,核心原因是:

  • xpath函数默认提取的是节点的文本值或属性,而非节点本身的完整XML结构;
  • 用/bookstore/book/description/*只会返回description的子节点列表,且返回的是子节点的文本内容(不是XML结构);
  • text()针对description节点时,因为它没有直接的文本内容(只有嵌套子节点),所以返回NULL。

正确解决方案

PySpark提供了xpath_string函数,可以直接将选中的XML节点序列化为完整的字符串。步骤如下:

  1. 导入所需函数:
from pyspark.sql.functions import col, xpath_string
  1. 使用xpath_string提取完整的<description>节点:
df = df.withColumn(
    "nested_content",
    xpath_string(col("original_content"), "/bookstore/book/description")
)

效果验证

针对你提供的示例XML:

"<?xml version="1.0" encoding="UTF-8"?><bookstore><book category="cooking"><title lang="en">Everyday Italian</title><author>Giada De Laurentiis</author><description><tag1>Example text 1</tag1><tag2>Example text 2</tag2><tag4>Example text 3</tag4></description><year>2005</year><price>30.00</price></book></bookstore>"

执行上述代码后,nested_content列会得到你需要的结果:

"<description><tag1>Example text 1</tag1><tag2>Example text 2</tag2><tag4>Example text 3</tag4></description>"

注意事项

  • 确保你的PySpark版本支持xpath_string(Spark 3.0+版本已包含该函数);
  • XPath路径要准确匹配XML结构,避免因层级错误导致提取失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:54:53