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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:45:47