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

初始化SparkSession抛出Py4JJavaError的解决方法

问题根因

抛出该Py4JJavaError的核心原因是PySpark与当前环境的JDK版本不兼容:你当前环境激活的是JDK 17及以上版本,3.3及更早版本的Spark未适配高版本JDK的模块访问限制——高版本JDK默认将sun.nio.ch等内部API封装在模块内不对外暴露,Spark依赖的StorageUtils类无法访问对应类就会触发IllegalAccessError。
你之前通过conda安装JDK时没有指定版本,默认拉取了最新的高版本JDK,因此修复操作没有生效。

解决方案

方案1(优先推荐,稳定性最高):切换到官方适配的JDK长期支持版本

Spark 2.x、3.x系列官方推荐兼容的JDK版本为JDK 8、JDK 11,直接在当前conda环境中安装指定版本即可:

  • 先清理之前安装的不匹配JDK包:
conda remove --force java-jdk openjdk
  • 安装指定版本的OpenJDK 11(对PySpark 3.x全系列兼容性最好):
conda install -c conda-forge openjdk=11
  • 安装完成后在Notebook单元格运行!java -version验证版本,确认输出为11.x版本后,重启Notebook内核,再运行SparkSession初始化代码即可。如果版本显示仍为高版本,直接退出重启整个Jupyter服务后再验证。

方案2(兼容方案):保留高版本JDK,添加JVM启动参数绕过模块限制

如果你因为其他依赖要求必须使用JDK 17及以上版本,可以在初始化Spark前添加JVM启动参数,开放Spark需要访问的内部模块权限:
在原有初始化代码前添加以下配置:

import os
# 配置JVM启动参数,开放对应内部API的访问权限
os.environ['PYSPARK_SUBMIT_ARGS'] = '--add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED pyspark-shell'

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('MoviePractice').getOrCreate()

注意:该方案属于权限绕过适配,如果你使用的Spark版本过低,后续可能还会触发其他内部API的访问报错,优先选择方案1切换JDK版本。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.07 16:15:42