【发布时间】:2023-01-11 12:53:53
【问题描述】:
我已经在笔记本中设置了密钥保管库范围,并使用以下步骤建立了与存储帐户的连接:
spark.conf.set("fs.azure.account.auth.type."+StorageAccountName+".dfs.core.windows.net", "OAuth")
spark.conf.set("fs.azure.account.oauth.provider.type."+StorageAccountName+".dfs.core.windows.net","org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
spark.conf.set("fs.azure.account.oauth2.client.id."+StorageAccountName+".dfs.core.windows.net",clientId)
spark.conf.set("fs.azure.account.oauth2.client.secret."+StorageAccountName+".dfs.core.windows.net",clientSecret)
spark.conf.set("fs.azure.account.oauth2.client.endpoint."+StorageAccountName+".dfs.core.windows.net","https://login.microsoftonline.com/mytenantid/oauth2/token")
“StorageAccountName”、“clientId”、“clientSecret”的值都来自密钥保管库,我能够正确获取它们的值。在我的存储帐户访问控制中,我还分配了 我的服务主体的存储 Blob 数据贡献者角色。
在这些配置之后,我分配了一个连接变量:
var apptable = "abfss://container@"+StorageAccountName+".dfs.core.windows.net/path/to/data"
如果我运行以下命令,我就能看到 blob 存储中的文件
display(dbutils.fs.ls(apptable))
我还可以检查模式:
var df = spark.read.format("delta").load(apptable)
df.printSchema()
但是如果我尝试运行以下查询:
var last_appt = spark.sql(s"""select max(updateddate) from apptable""").collect()(0).getTimestamp(0)
我得到了错误:
KeyProviderException: Failure to initialize configuration
Caused by: InvalidConfigurationValueException: Invalid configuration value detected for fs.azure.account.key
我在网上进行了研究,似乎 spark 配置中存在一些问题。但是如果访问存储失败,为什么上面的显示命令运行良好?在这种情况下可能缺少什么?
我对数据块的经验有限。感谢任何帮助。
【问题讨论】:
标签: azure-blob-storage azure-databricks azure-data-lake-gen2