如何在Jupyter Notebook中配置PySpark使用的Java版本
解决PySpark与Java版本冲突的问题(无需卸载高版本Java)
问题根源
你遇到的IllegalAccessError是因为Spark(尤其是2.x版本)依赖Java 8的内部API,而Java 9+的模块系统默认禁止外部程序访问sun.nio.ch这类内部包。必须让Spark使用Java 8运行,但Notebook中单独执行!export JAVA_HOME不会改变主进程的环境变量,因此无效。
解决方法
方法1:在Notebook代码中直接指定Java 8路径
在导入PySpark前,通过Python的os模块设置环境变量,后续启动的Spark进程会继承这个环境:
import os # 替换成你的Java 8实际路径,示例:/Library/Java/JavaVirtualMachines/jdk1.8.0_301.jdk/Contents/Home os.environ["JAVA_HOME"] = "/path/to/your/jdk1.8.0" # 若未全局配置Spark路径,需添加以下行 os.environ["SPARK_HOME"] = "/path/to/your/spark" import pyspark from pyspark.sql import SparkSession spark = SparkSession.builder.appName('Practise').getOrCreate()
方法2:修改VSCode的Jupyter启动环境
让VSCode启动Jupyter时默认加载Java 8的环境变量:
- 打开VSCode设置(快捷键
Cmd+,) - 搜索
terminal.integrated.env.osx - 点击
编辑 in settings.json,添加配置:"terminal.integrated.env.osx": { "JAVA_HOME": "/path/to/your/jdk1.8.0" } - 重启VSCode并重新打开Notebook,Jupyter进程将默认使用Java 8环境
方法3:正确配置findspark
若要继续使用findspark,需明确指定Java和Spark的路径:
import os os.environ["JAVA_HOME"] = "/path/to/your/jdk1.8.0" import findspark findspark.init("/path/to/your/spark") # 指定Spark安装路径 from pyspark.sql import SparkSession spark = SparkSession.builder.appName('Practise').getOrCreate()
验证生效情况
在Notebook中执行以下代码,确认Java版本已切换为8:
import subprocess print(subprocess.check_output(["java", "-version"], stderr=subprocess.STDOUT).decode())
内容的提问来源于stack exchange,提问作者Morgan
相关产品推荐
相关产品推荐

