You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Databricks中用RDD API读取ADLS Gen2文件报错求助

解决Unity Catalog下RDD API读取ABFSS路径的认证问题

核心原因

启用Unity Catalog后,DataFrame API通过SparkSession自动继承UC的认证配置(如托管身份、服务主体凭据),但SparkContext(sc)的RDD API默认不会自动关联UC的认证体系,直接使用原始ABFSS URL会触发密钥配置错误。

解决方案

方案1:使用Unity Catalog外部位置引用(推荐)

既然已配置外部位置,直接通过UC的外部位置名称引用路径,无需手动管理密钥,RDD会自动通过UC的认证读取文件:

# 替换为你在UC中创建的外部位置名称
rdd_in = sc.textFile("/external-locations/my_external_location/RDD_testing/input.txt")

注:外部位置需提前在Unity Catalog中创建,示例创建语句:

CREATE EXTERNAL LOCATION my_external_location 
URL 'abfss://container_name@storage_account_name.dfs.core.windows.net/' 
WITH (CREDENTIAL my_uc_credential);

方案2:直接为SparkContext设置Hadoop认证配置

如果必须使用原始ABFSS URL,需直接修改SparkContext对应的Hadoop配置(而非仅SparkSession):

accessKey = 'my_access_key'
# 直接设置Hadoop配置,而非SparkSession的conf
sc._jsc.hadoopConfiguration().set(
    "fs.azure.account.key.storage_account_name.dfs.core.windows.net", 
    accessKey
)
# 再读取文件
rdd_in = sc.textFile('abfss://container_name@storage_account_name.dfs.core.windows.net/RDD_testing/input.txt')

方案3:挂载外部位置到DBFS

将ABFSS存储挂载到DBFS后,使用DBFS路径读取,RDD可直接识别:

# 先挂载(仅需执行一次)
dbutils.fs.mount(
    source = "abfss://container_name@storage_account_name.dfs.core.windows.net/",
    mount_point = "/mnt/my_rdd_mount",
    extra_configs = {"fs.azure.account.key.storage_account_name.dfs.core.windows.net": accessKey}
)

# 通过DBFS路径读取RDD
rdd_in = sc.textFile("/mnt/my_rdd_mount/RDD_testing/input.txt")

内容的提问来源于stack exchange,提问作者Ken Masters

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 05:58:31