Azure Databricks使用spark-xml加载XML文件失败求助
Azure Databricks中使用PySpark加载XML文件报错:fs.azure.account.key配置无效
环境信息
- Azure Databricks 14.3 LTS(内置Apache Spark 3.5.0、Scala 2.12)
失败代码片段
# 加载指定XML文件 single_file_df = ( spark.read.format("com.databricks.spark.xml") .option("rowTag", "Tag").load(specific_file_path) ) # # 展示数据样本 single_file_df.show(truncate=False)
报错信息
Py4JJavaError: An error occurred while calling o457.load.
: Failure to initialize configuration for storage account [REDACTED].dfs.core.windows.net: Invalid configuration value detected for fs.azure.account.keyInvalid configuration value detected for fs.azure.account.keyFile
,
line 41 # 加载指定XML文件
2 single_file_df = (
3 spark.read.format("com.databricks.spark.xml")
----> 4 .option("rowTag", "Tag").load(specific_file_path)
5 )
7 # # 展示数据样本
8 single_file_df.show(truncate=False)
已完成的排查步骤
- 连接验证:可正常列出容器内容,且通过以下代码成功读取文件原始文本:
simple_df = spark.read.text(specific_file_path) simple_df.show(truncate=False) - 集群已安装最新版XML处理库:
com.databricks:spark-xml_2.12:0.15.0 - 拥有目标存储Blob的全部权限:
Storage Blob Data Owner、Storage Blob Data Contributor、Storage Blob Data Reader - 查阅相关存储文档未找到有效解决方案
需求
希望仅使用PySpark实现XML文件加载,不使用存储挂载或Blob SDK连接方式,求其他可行解决办法。
完整代码
# 定义Azure Key Vault作用域 scope = 'your_scope_here' # 从Key Vault安全获取存储账户名称和访问密钥 dl_storage_account = dbutils.secrets.get(scope=scope, key="dl_storage_account_name_key") dl_storage_account_access_key = dbutils.secrets.get(scope=scope, key="dl_storage_account_access_key_key") blob_storage_account = dbutils.secrets.get(scope=scope, key="blob_storage_account_name_key") blob_storage_account_access_key = dbutils.secrets.get(scope=scope, key="blob_storage_account_access_key_key") # 设置Spark访问Azure存储的配置 spark.conf.set(f"fs.azure.account.key.{blob_storage_account}.blob.core.windows.net", blob_storage_account_access_key) spark.conf.set(f"fs.azure.account.key.{dl_storage_account}.dfs.core.windows.net", dl_storage_account_access_key) # 定义Azure Data Lake输入路径(已脱敏) input_path = f"abfss://container-name@{dl_storage_account}.dfs.core.windows.net/path/to/directory/" from pyspark.sql import SparkSession from pyspark.sql.functions import schema_of_xml, expr, col, current_timestamp,lit,explode_outer, input_file_name, regexp_extract,concat_ws from pyspark.sql.types import NullType # 定义目标XML文件的具体路径(已脱敏) specific_file_path = f"abfss://container-name@{dl_storage_account}.dfs.core.windows.net/path/to/directory/file-name.xml" # 加载指定XML文件 single_file_df = ( spark.read.format("com.databricks.spark.xml") .option("rowTag", "Tag").load(specific_file_path) ) # # 展示数据样本 single_file_df.show(truncate=False)
内容的提问来源于stack exchange,提问作者dexon
相关产品推荐
相关产品推荐

