如何在Databricks中无需账户密钥读取Excel文件?
问题描述
我在Databricks中安装了com.crealytics:spark-excel_2.12:0.13.5包,编写了如下Spark代码读取Excel文件:
df = spark.read.format("com.crealytics.spark.excel")\ .option("header", "false") \ .option("inferSchema", "true") \ .option("dataAddress", "Version") \ .load('abfss://abc.xlsx')
同时在集群配置中设置了服务主体相关参数:
fs.azure.account.oauth2.client.secret {{secrets/xx}} fs.azure.account.auth.type OAuth spark.databricks.delta.preview.enabled true fs.azure.account.oauth2.client.endpoint https://login.microsoftonline.com/0x/oauth2/token fs.azure.account.oauth.provider.type org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider fs.azure.account.oauth2.client
运行时出现错误:
Failure to initialize configurationInvalid configuration value detected for fs.azure.account.key
请问如何无需账户密钥访问该Excel数据?
解决方案
1. 补全并修正服务主体认证配置
当前集群配置存在参数缺失和无效项,导致认证逻辑混乱,系统仍尝试调用账户密钥。完整的服务主体OAuth认证配置应包含以下参数:
fs.azure.account.auth.type OAuth fs.azure.account.oauth.provider.type org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider fs.azure.account.oauth2.client.id <你的服务主体ID> fs.azure.account.oauth2.client.secret {{secrets/xx}} fs.azure.account.oauth2.client.endpoint https://login.microsoftonline.com/<你的租户ID>/oauth2/token
- 替换
<你的服务主体ID>为实际的服务主体应用ID; - 替换
<你的租户ID>为Azure租户ID(即当前endpoint中0x对应的真实值); - 删除原配置中无效的
fs.azure.account.oauth2.client行。
2. 确保服务主体拥有数据访问权限
服务主体必须被授予目标ADLS Gen2容器的Storage Blob Data Reader(或更高权限)角色,否则即使配置正确也无法读取数据。
3. 修正Excel文件路径格式
abfss://abc.xlsx路径不完整,正确的ADLS Gen2路径格式为:
abfss://<容器名>@<存储账户名>.dfs.core.windows.net/abc.xlsx
路径缺失容器和存储账户信息会导致认证逻辑异常。
4. 移除冲突的账户密钥配置
检查集群或Workspace级别的Hadoop配置,若存在fs.azure.account.key.<存储账户名>.dfs.core.windows.net这类参数,需立即移除——这类配置会与OAuth认证冲突,强制系统尝试使用账户密钥访问数据。
内容的提问来源于stack exchange,提问作者user3579222
相关产品推荐
相关产品推荐

