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

PySpark写入Avro遇SQLConf相关类/方法缺失错误求助

问题排查:PySpark写入Avro时的依赖版本冲突问题

错误现象

  • 使用PySpark 3.5.3执行Avro写入时,抛出java.lang.NoClassDefFoundError,提示找不到org/apache/spark/sql/internal/SQLConf$LegacyBehaviorPolicy$类
  • 降级至PySpark 3.3.4后,抛出java.lang.NoSuchMethodError,提示找不到SQLConf$.LEGACY_AVRO_REBASE_MODE_IN_WRITE()方法

问题根源

两个错误均由Spark核心版本与Avro依赖包版本不匹配、环境中存在冲突依赖导致:

  1. Spark 3.5.3的Avro包依赖3.5.x版本的Spark核心类,若环境中存在旧版Spark核心Jar,会触发类找不到的错误;
  2. Spark 3.3.x中尚未引入LEGACY_AVRO_REBASE_MODE_IN_WRITE方法,Avro包3.3.4调用不存在的方法,说明环境中可能混合了高版本Avro类,或依赖版本不对应。

修复方案

1. 严格保持Spark与Avro依赖版本一致

spark-avro的版本必须和PySpark版本完全相同,同时确保Hadoop相关依赖版本兼容:

  • 若使用PySpark 3.5.3,依赖配置改为:
.config("spark.jars.packages", "org.apache.spark:spark-avro_2.12:3.5.3,org.apache.hadoop:hadoop-azure:3.3.4,com.microsoft.azure:azure-storage:8.6.0")
  • 若使用PySpark 3.3.4,依赖配置保持如下(已匹配版本):
.config("spark.jars.packages", "org.apache.spark:spark-avro_2.12:3.3.4,org.apache.hadoop:hadoop-azure:3.3.4,com.microsoft.azure:azure-storage:8.6.0")

2. 清理本地冲突缓存Jar

删除本地Ivy缓存目录下的旧版本Spark、Avro、Hadoop相关Jar,避免版本混合:

  • Windows路径:C:/Users/losjfg/.ivy2/jars/,删除后重新运行程序,让Ivy自动拉取匹配的依赖包。

3. 排查环境中的额外依赖

确保运行环境中没有手动添加的其他Spark或Avro Jar包,避免类加载优先级冲突。


原始代码与环境信息

初始代码(PySpark 3.5.3)

spark = pyspark.sql.SparkSession.builder\
    .master("local[*]")\
    .appName("MiAplicacionSpark")\
    .config("spark.jars.packages", "org.apache.spark:spark-avro_2.12:3.5.3,org.apache.hadoop:hadoop-azure:3.2.0,com.microsoft.azure:azure-storage:8.6.0") \
    .getOrCreate()

...

df = spark.read \
    .format("jdbc") \
    .option("url", jdbc_url) \
    .option("dbtable", query) \
    .option("user", username) \
    .option("password", password) \
    .option("fetchsize", "20000") \
    .load()


df.write.format("avro").mode("overwrite").save(file_path + "_magic.avro")

降级后的依赖配置(PySpark 3.3.4)

.config("spark.jars.packages", "org.apache.spark:spark-avro_2.12:3.3.4,org.apache.hadoop:hadoop-azure:3.3.4,com.microsoft.azure:azure-storage:8.6.0") \

环境信息

  • Java版本:11.0.16.1
  • Spark版本:3.3.4
  • 已加载的Jars列表:
    • file:///C:/Users/losjfg/.ivy2/jars/org.apache.hadoop_hadoop-azure-3.3.4.jar
    • file:///C:/Users/losjfg/.ivy2/jars/com.microsoft.azure_azure-storage-8.6.0.jar
    • file:///C:/Users/losjfg/.ivy2/jars/org.apache.httpcomponents_httpclient-4.5.13.jar
    • file:///C:/Users/losjfg/.ivy2/jars/org.apache.hadoop.thirdparty_hadoop-shaded-guava-1.1.1.jar
    • file:///C:/Users/losjfg/.ivy2/jars/org.eclipse.jetty_jetty-util-ajax-9.4.43.v20210629.jar
    • file:///C:/Users/losjfg/.ivy2/jars/org.codehaus.jackson_jackson-mapper-asl-1.9.13.jar
    • file:///C:/Users/losjfg/.ivy2/jars/org.codehaus.jackson_jackson-core-asl-1.9.13.jar
    • file:///C:/Users/losjfg/.ivy2/jars/org.wildfly.openssl_wildfly-openssl-1.0.7.Final.jar
    • file:///C:/Users/losjfg/.ivy2/jars/org.apache.httpcomponents_httpcore-4.4.13.jar
    • file:///C:/Users/losjfg/.ivy2/jars/commons-logging_commons-logging-1.1.3.jar
    • file:///C:/Users/losjfg/.ivy2/jars/commons-codec_commons-codec-1.15.jar
    • file:///C:/Users/losjfg/.ivy2/jars/org.eclipse.jetty_jetty-util-9.4.43.v20210629.jar
    • file:///C:/Users/losjfg/.ivy2/jars/com.fasterxml.jackson.core_jackson-core-2.9.4.jar
    • file:///C:/Users/losjfg/.ivy2/jars/org.slf4j_slf4j-api-1.7.12.jar
    • file:///C:/Users/losjfg/.ivy2/jars/org.apache.commons_commons-lang3-3.4.jar
    • file:///C:/Users/losjfg/.ivy2/jars/com.microsoft.azure_azure-keyvault-core-1.0.0.jar
    • file:///C:/Users/losjfg/.ivy2/jars/com.google.guava_guava-20.0.jar

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 12:29:52