在Azure Databricks挂载存储容器时遭遇StringIndexOutOfBoundsException错误求助
问题分析与解决方案
错误根源
你代码里的核心问题是混淆了存储账户名称和访问密钥的获取逻辑:
storage_account_name被错误赋值为从密钥范围获取的AccessKey(这实际是访问密钥值),而非存储账户的名称。- 用错误的"账户名"拼接
wasbs路径和配置项时,会生成格式非法的字符串,触发StringIndexOutOfBoundsException索引越界错误。
修正后的挂载代码
先确认密钥范围中存储的密钥:
- 确保有一个密钥存储存储账户名称(比如密钥名设为
storage-account-name) - 另一个密钥存储存储账户访问密钥(即你现有的
Accessprimary-key)
修改后的代码如下:
scope = 'myscope' # 获取存储账户名称(替换为你密钥范围中对应存储账户名的密钥key) storage_account_name = dbutils.secrets.get(scope=scope, key="storage-account-name") # 获取存储账户访问密钥 storage_account_access_key = dbutils.secrets.get(scope=scope, key="Accessprimary-key") cont="reference" configs = {f"fs.azure.account.key.{storage_account_name}.blob.core.windows.net":storage_account_access_key} dbutils.fs.mount( source = f"wasbs://{cont}@{storage_account_name}.blob.core.windows.net/", mount_point = f"/mnt/{cont}", extra_configs = configs )
额外验证步骤
- 先确认挂载点未被占用,执行以下命令卸载可能存在的旧挂载(如果有):
dbutils.fs.unmount("/mnt/reference") - 验证存储账户名称和密钥的正确性(仅测试用,生产环境禁止打印密钥):
确保存储账户名称是小写字母+数字的短字符串,访问密钥是长串的Base64格式字符。print("存储账户名:", storage_account_name) # 仅验证密钥开头格式是否符合Base64规范 print("密钥开头:", storage_account_access_key[:5])
内容的提问来源于stack exchange,提问作者Surender Raja
相关产品推荐
相关产品推荐

