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

Azure Synapse Notebook中PySpark操作XML至ADLS遇类未找到错误

解决Azure Synapse中PySpark读取XML的类找不到问题,及完整XML转Parquet流程

一、错误原因与依赖修复

出现Py4JJavaError: java.lang.ClassNotFoundException: Failed to find data source: com.databricks.spark.xml的核心原因是:Synapse Spark集群默认未预装Databricks XML处理库,需手动添加依赖,两种方式二选一即可:

  • 集群配置添加Maven依赖:在Synapse集群的依赖配置中,加入Maven坐标:com.databricks:spark-xml_2.12:0.15.0(注意:2.12是Scala版本,需和集群的Scala版本匹配,Spark 3.x系列通常对应Scala 2.12)
  • Notebook内pip安装:在Notebook开头执行以下命令,安装后重启Spark会话(关闭重开Notebook即可):
%pip install spark-xml

二、完整操作流程:API XML字符串 → ADLS存储 → Parquet转换

1. 将API返回的XML字符串写入ADLS

假设你已经获取到XML字符串xml_str,可通过两种方式写入ADLS:

方式一:PySpark DataFrame写入

from pyspark.sql.types import StringType

# 将XML字符串转为RDD再生成DataFrame
xml_rdd = spark.sparkContext.parallelize([xml_str])
df_xml_raw = spark.createDataFrame(xml_rdd, StringType())

# 写入ADLS文本文件(后续用XML库解析)
df_xml_raw.write.mode("overwrite").text("abfss://<container>@<account>.dfs.core.windows.net/path/to/xml_file")

方式二:ADLS文件系统直接写入

from azure.storage.fs import AzureBlobFileSystem

# 初始化ADLS客户端
fs = AzureBlobFileSystem(account_name="your_adls_account", account_key="your_account_key")

# 写入XML字符串到指定路径
with fs.open("abfss://<container>@<account>.dfs.core.windows.net/path/to/xml_file", "w") as f:
    f.write(xml_str.encode("utf-8"))

2. 读取XML文件并转换为Parquet

依赖生效后,执行以下代码完成转换:

from pyspark.sql import SparkSession

# 确保会话加载XML库(若通过集群配置添加依赖可省略此段)
spark = SparkSession.builder \
    .appName("XML-to-Parquet") \
    .config("spark.jars.packages", "com.databricks:spark-xml_2.12:0.15.0") \
    .getOrCreate()

# 读取XML文件,指定rowTag为你的XML数据根节点(示例为"message")
df_xml = spark.read.format("com.databricks.spark.xml") \
    .option("rowTag", "message") \
    .load("abfss://<container>@<account>.dfs.core.windows.net/path/to/xml_file")

# 保存为Parquet格式到ADLS
df_xml.write.mode("overwrite").parquet("abfss://<container>@<account>.dfs.core.windows.net/path/to/parquet_output")

三、关键注意事项

  • ADLS路径需使用Synapse兼容格式:abfss://<容器名>@<存储账户名>.dfs.core.windows.net/文件路径
  • 依赖版本需匹配集群环境:若集群使用Spark 2.x,需对应Scala 2.11版本的依赖(如com.databricks:spark-xml_2.11:0.12.0)
  • 若使用pip安装依赖,必须重启Spark会话才能生效,否则仍会出现类找不到错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:30:44