从Databricks挂载ADLS Gen2 abfss时遇错误:Unsupported Azure Scheme: abfss
错误原因分析及修复方案
核心错误原因
协议与配置键不匹配:你使用了ADLS Gen2专属的
abfss://协议(对应DFS端点dfs.core.windows.net),但配置项却用了Blob存储的格式fs.azure.account.key.<storage-account>.blob.core.windows.net。这个配置键仅适用于wasbs://协议的Blob存储挂载,和abfss协议完全不兼容,直接触发了"Unsupported Azure Scheme: abfss"错误。代码缩进逻辑异常:
if not mounted_exist的代码块缩进在了for循环内部,这会导致遍历挂载列表时每次循环都执行挂载判断,逻辑不符合预期。虽然这不是当前报错的直接原因,但会引发后续的重复挂载或挂载失败问题。
修正后的代码
container_name = "root" storage_account = "mystorageaccount" key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # 保持abfss协议对应DFS端点 url = f"abfss://{container_name}@{storage_account}.dfs.core.windows.net/" # 配置键匹配DFS端点格式 config = f"fs.azure.account.key.{storage_account}.dfs.core.windows.net" mount_folder = "/mnt/lake" mounted_list = dbutils.fs.mounts() mounted_exist = False for item in mounted_list: if mount_folder in item[0]: mounted_exist = True break # 移到for循环外部,确保仅执行一次挂载判断 if not mounted_exist: dbutils.fs.mount(source = url, mount_point = mount_folder, extra_configs = {config : key})
额外说明
如果你的Databricks Runtime版本过低(低于5.3),可能本身不支持abfss协议,这种情况下需要升级到支持ADLS Gen2的Runtime版本。不过绝大多数场景下,核心问题都是协议与配置键不匹配导致的。
内容的提问来源于stack exchange,提问作者Patterson
相关产品推荐
相关产品推荐

