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

Windows环境Spark3.2.0启动报java.lang.NoClassDefFoundError问题求助

报错原因

这个报错核心是Apache Spark 3.2.0与你安装的Java 17版本不兼容。Spark 3.2.x 官方仅支持Java 8、Java 11两个LTS版本,Java 17对模块化权限、反射访问规则做了不向下兼容的调整,导致Spark内部的org.apache.spark.storage.StorageUtils等核心类无法正常初始化,进而抛出NoClassDefFoundError异常。

解决方案

方案1(推荐,稳定性最高):降级Java版本

  • 卸载当前系统中的Java SE Development Kit 17.0.1
  • 安装Java 8 或 Java 11的官方LTS版本,安装完成后修改系统环境变量:
    • 新增JAVA_HOME变量,值为JDK的安装根路径
    • 在Path变量中新增%JAVA_HOME%\bin条目,并且将其上移到其他Java版本配置之前
  • 打开新的命令行窗口执行java -version,确认输出版本为你安装的Java 8/11,再重新运行Spark测试代码即可。

方案2(仅用于临时兼容,不推荐生产环境使用):添加JVM兼容参数

如果必须保留Java 17环境,可以在初始化SparkSession时添加额外的JVM启动参数,放开Java 17的模块化访问限制,修改后的测试代码如下:

import pyspark
from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .config("spark.driver.extraJavaOptions", "--add-exports java.base/sun.nio.ch=ALL-UNNAMED \
        --add-exports java.base/sun.nio.cs=ALL-UNNAMED \
        --add-exports java.base/sun.security.action=ALL-UNNAMED \
        --add-opens java.base/java.util=ALL-UNNAMED \
        --add-opens java.base/java.lang=ALL-UNNAMED") \
    .config("spark.executor.extraJavaOptions", "--add-exports java.base/sun.nio.ch=ALL-UNNAMED \
        --add-exports java.base/sun.nio.cs=ALL-UNNAMED \
        --add-exports java.base/sun.security.action=ALL-UNNAMED \
        --add-opens java.base/java.util=ALL-UNNAMED \
        --add-opens java.base/java.lang=ALL-UNNAMED") \
    .getOrCreate()

df = spark.sql('''select 'spark' as hello ''')
df.show()

额外提示:Windows环境下还需确认HADOOP_HOME环境变量配置正确,对应版本的winutils.exe文件已放在%HADOOP_HOME%\bin目录下,否则也可能触发Spark初始化异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:27:00