PySpark在CLI正常运行,VS Code中无法创建SparkSession的问题求助
问题排查与解决建议
核心问题是JDK 17的模块系统限制了Spark对内部API的访问,Spark 3.3.1在JDK17环境下需要额外配置JVM参数才能正常运行——你的系统CLI环境大概率已经自动加载了这些参数,但VS Code的内置终端及笔记本环境未配置,导致启动失败。
以下是具体排查和解决步骤:
1. 对比环境变量差异
- 分别在系统CLI和VS Code内置终端中执行以下命令,检查关键环境变量的差异:
# Linux/macOS echo $SPARK_OPTS echo $JAVA_OPTS echo $PYSPARK_SUBMIT_ARGS # Windows PowerShell echo %SPARK_OPTS% echo %JAVA_OPTS% echo %PYSPARK_SUBMIT_ARGS% - 系统CLI能正常运行的话,必然包含类似
--add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/sun.nio.ch=ALL-UNNAMED的JVM参数。
2. 临时配置VS Code终端环境
在VS Code的内置终端中直接设置环境变量,立即生效:
# Linux/macOS export SPARK_OPTS="--add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/sun.nio.ch=ALL-UNNAMED" # Windows PowerShell $env:SPARK_OPTS="--add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/sun.nio.ch=ALL-UNNAMED"
设置完成后再启动PySpark或运行笔记本即可。
3. 永久配置VS Code环境
- 打开VS Code设置(快捷键
Ctrl+,),搜索对应系统的终端环境变量设置:- Linux:
terminal.integrated.env.linux - macOS:
terminal.integrated.env.osx - Windows:
terminal.integrated.env.windows
- Linux:
- 添加
SPARK_OPTS键,值为"--add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/sun.nio.ch=ALL-UNNAMED" - 重启VS Code终端后,配置永久生效。
4. 配置PySpark笔记本内核
如果使用IPython内核运行PySpark笔记本,需修改内核配置文件:
- 找到内核配置文件(通常路径为
~/.ipython/kernels/pyspark/kernel.json) - 在
env字段中添加SPARK_OPTS参数:{ "argv": ["python", "-m", "ipykernel_launcher", "-f", "{connection_file}"], "display_name": "PySpark", "env": { "SPARK_OPTS": "--add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/sun.nio.ch=ALL-UNNAMED", "PYSPARK_PYTHON": "python3.10" } } - 保存后重启笔记本内核即可。
内容的提问来源于stack exchange,提问作者ignacywawa
相关产品推荐
相关产品推荐

