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

本地PySpark使用sc.textFile读取Azure Blob报无凭证错误如何解决

问题核心原因

你遇到的报错是两个配置相关的问题共同导致的:

  1. 配置生效时机错误:spark.read.load属于Spark SQL API,会实时读取当前spark.conf中的配置;但sc.textFile属于RDD API,依赖SparkContext初始化时就加载完成的Hadoop配置。你在SparkSession初始化完成后才通过sc._conf.setAll修改配置,这类修改不会同步到已经初始化的Hadoop FileSystem配置中,因此不生效。
  2. 配置键拼写错误:你给spark.conf.set的配置键少了.key后缀,正确的配置键格式为fs.azure.account.key.<存储账户名>.blob.core.windows.net,即使Spark SQL能生效也是巧合,不符合规范的配置会导致RDD读取时无法识别密钥。另外你原代码中sc._conf.setAll里的存储账户占位符多写了一个字母c(写为storage-acccount-name),实际使用时注意排查拼写错误。

解决方案

按照如下方式调整代码即可:

  1. 优先在SparkSession构建阶段就传入所有存储相关配置
  2. 如果需要运行时补充配置,直接修改SparkContext关联的Hadoop配置,不要修改sc._conf

正确代码示例

access_key = "<storage-account-access-key>"
storage_account_name = "<storage-account-name>"
container_name = "<container-name>"

# 构建SparkSession时就配置存储密钥
spark = SparkSession.builder \
    .master('local') \
    .appName('app') \
    .config(f"fs.azure.account.key.{storage_account_name}.blob.core.windows.net", access_key) \
    .getOrCreate()

# 运行时补充配置的写法(可选,初始化时已配可以不写)
sc = spark.sparkContext
sc._jsc.hadoopConfiguration().set(f"fs.azure.account.key.{storage_account_name}.blob.core.windows.net", access_key)

# 读取RDD
csv_raw = sc.textFile(f"wasbs://{container_name}@{storage_account_name}.blob.core.windows.net/dir")
print(csv_raw.collect())

额外注意事项

如果修改后依然报错,可检查依赖版本匹配:hadoop-azure的版本需要和Spark内置的Hadoop主版本对齐,Spark 3.1.1默认使用Hadoop 3.2.x,你使用的3.3.0版本属于兼容范围,若出现其他类NotFound异常可将依赖替换为对应3.2.x版本即可。

内容的提问来源于stack exchange,提问作者Aaron Gonzalez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:57:03