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

Windows10启动PySpark报InaccessibleObjectException异常求助

Windows 10启动PySpark报InaccessibleObjectException修复方案

根因说明

该报错和SPARK_HOME、HADOOP_HOME、Python路径配置无关,核心触发原因是启动PySpark时实际调用的Java版本为Java 16及以上的高版本,而非你安装的Java 8。
Java 16开始默认启用强模块封装规则,不允许未命名模块通过反射访问java.base模块下的私有成员,3.3及以下版本的Spark没有适配高版本Java的模块权限规则,反射访问java.nio.DirectByteBuffer私有构造方法时就会抛出该异常。

前置排查

打开新的CMD窗口执行以下命令,确认当前默认Java版本:

java -version

如果输出的版本号高于1.8,说明环境变量中高版本Java的路径优先级高于你配置的Java 8路径,启动时优先加载了不兼容的高版本Java。

修复方案(二选一即可)

方案1:调整环境变量优先级,强制使用Java 8(兼容性最好,优先推荐)

  • 打开系统环境变量编辑面板,找到系统变量列表里的Path条目,点击编辑
  • 将你安装的Java 8的bin目录路径(通常格式为C:\Program Files\Java\jdk1.8.0_XXX\bin)上移到Path列表的最顶端,确保优先级高于其他所有Java相关路径
  • 确认系统变量JAVA_HOME的值指向Java 8的安装根目录,没有指向高版本JDK路径
  • 关闭所有已打开的CMD窗口,重新打开新的CMD窗口,再次执行java -version确认版本为1.8后,启动pyspark即可正常运行

方案2:保留高版本Java,添加JVM参数绕过模块限制

如果必须使用高版本Java,可通过添加JVM启动参数放开模块访问权限:

  • 打开系统环境变量编辑面板,新建系统变量PYSPARK_SUBMIT_ARGS,变量值设置为:
--add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED pyspark-shell
  • 保存变量配置后重启CMD窗口,再启动PySpark即可绕过模块权限检查

注意:该方案为兼容性绕过手段,在高版本Java搭配低版本Spark的场景下可能触发其他未知兼容问题,生产环境优先选择Java 8作为Spark运行环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:57:27