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

创建SparkSession时遭遇java.lang.IncompatibleClassChangeError的解决方法

解决Spark运行时IncompatibleClassChangeError问题

问题核心原因

你遇到的java.lang.IncompatibleClassChangeError: Implementing class错误,本质是依赖版本与运行环境不兼容,具体包括:

  • Spark 3.5.1已不再支持Java 8,最低要求Java 11及以上版本
  • 缺少Spark SQL模块依赖(SparkSession属于spark-sql模块,而非spark-core)
  • Scala 2.12.0版本过低,与Spark 3.5.1的兼容Scala版本不匹配

具体解决步骤

1. 升级Java版本到11或更高

Spark 3.5.x官方已放弃Java 8支持,建议安装OpenJDK 11/17(LTS版本):

  • 安装后在IntelliJ中修改项目SDK:File > Project Structure > Project Settings > Project,选择新的Java版本
  • 确认系统环境变量JAVA_HOME指向新的Java安装目录

2. 修正Maven依赖配置

修改pom.xml,添加缺失的spark-sql依赖,并匹配兼容的Scala版本:

<dependencies>
    <!-- Spark Core -->
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.12</artifactId>
        <version>3.5.1</version>
    </dependency>
    <!-- 必须添加Spark SQL依赖,SparkSession属于此模块 -->
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.12</artifactId>
        <version>3.5.1</version>
    </dependency>
    <!-- 使用Spark 3.5.1兼容的Scala 2.12.x版本,如2.12.18 -->
    <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>2.12.18</version>
    </dependency>
</dependencies>

3. 清理缓存并重新构建

  • 执行Maven命令清理缓存并重新下载依赖:mvn clean install -U
  • 在IntelliJ中点击Maven > Reload All Maven Projects,确保依赖正确同步

4. 验证运行配置

  • 检查IntelliJ运行配置:Run > Edit Configurations,确认JRE选择升级后的Java版本
  • 命令行运行时,执行java -version确认使用的是新的Java版本

错误及代码信息

错误栈

"C:\Program Files\Java\jdk1.8.0_212\bin\java.exe" ...
Connected to the target VM, address: '127.0.0.1:57229', transport: 'socket'
Exception in thread "main" java.lang.IncompatibleClassChangeError: Implementing class
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:1106)
    at my.org.MyClass.<init>(MyClass.scala:2)

你的代码

import org.apache.spark.sql.SparkSession
SparkSession.builder().master("local[*]").appName("my app").getOrCreate()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:18:35