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

本地Spark环境写入Azure Blob Storage遇类缺失问题求助

解决方案:本地Spark写入Azure Blob Storage依赖冲突问题

问题根源

你的配置存在两个核心问题:

  • 重复引入多版本hadoop-azure(3.3.1、3.4.0),导致类加载冲突
  • 手动添加大量冗余依赖(如重复的hadoop-azure、jetty系列包),引发版本不兼容

步骤1:清理Spark依赖配置

移除所有重复、冗余的包,仅保留核心兼容依赖。Spark会自动拉取依赖的传递包,无需手动添加hadoop-common、jetty等:

spark = SparkSession.builder \
.appName("Azure Blob Storage Access") \
.config("spark.jars.packages", "org.apache.hadoop:hadoop-azure:3.3.1,com.microsoft.azure:azure-storage-blob:11.0.1") \
.getOrCreate()

注:Spark 3.5.1与Hadoop 3.3.1是官方兼容组合,版本匹配可避免绝大多数类加载问题。

步骤2:配置Azure Blob认证

创建会话后添加存储账户的认证信息(以存储密钥为例):

# 替换为你的存储账户名和密钥
spark.conf.set("fs.azure.account.key.your-storage-account.blob.core.windows.net", "your-storage-account-key")

# 若使用SAS令牌,替换为以下配置
# spark.conf.set("fs.azure.sas.your-container.your-storage-account.blob.core.windows.net", "your-sas-token")

步骤3:移除手动复制的jar包

不要将jar包手动放到/opt/homebrew/Cellar/apache-spark/3.5.1/libexec/jars目录,手动添加的包会和Spark自动拉取的依赖冲突,引发版本混乱。

步骤4:测试写入操作

用简单代码验证功能:

# 创建测试数据
test_df = spark.createDataFrame([(1, "demo"), (2, "test")], ["id", "content"])

# 写入Blob Storage(替换容器名和账户名)
test_df.write.mode("overwrite").csv("wasbs://your-container@your-storage-account.blob.core.windows.net/spark-output")

排查技巧

如果仍有类找不到错误:

  • 执行spark.sparkContext.listJars()查看加载的jar包,检查是否存在版本冲突的包
  • 确认Java版本:Spark 3.5.1仅支持Java 8或Java 11,请勿使用Java 17+

内容的提问来源于stack exchange,提问作者Chris H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 14:42:04