JupyterLab中初始化SparkContext时出现Py4JJavaError报错如何解决
报错原因
该报错是Java版本与当前PySpark版本不兼容导致的。Spark 3.3及更早版本仅兼容Java 8、Java 11,若本地安装了Java 16及更高版本,Java的模块化限制会默认禁止未命名模块访问sun.nio.ch内部包,触发该IllegalAccessError。
解决办法
可根据自身使用场景选择任意一种方案:
- 方案1(最稳妥,无后续兼容问题):卸载本地高版本Java,安装Java 8或Java 11,正确配置
JAVA_HOME环境变量后重新运行代码即可。 - 方案2(无需更换Java版本):在初始化SparkContext前添加JVM启动参数,开放对应包的访问权限,修改后的代码如下:
import pyspark from pyspark import SparkConf conf = SparkConf() conf.set("spark.driver.extraJavaOptions", "--add-exports java.base/sun.nio.ch=ALL-UNNAMED") conf.set("spark.executor.extraJavaOptions", "--add-exports java.base/sun.nio.ch=ALL-UNNAMED") sc = pyspark.SparkContext("local[*]", conf=conf)
- 方案3:将PySpark升级到3.4及以上版本,新版本已适配高版本Java的模块化限制,无需额外配置即可正常运行。
内容的提问来源于stack exchange,提问作者The Questionner
相关产品推荐
相关产品推荐

