在VS Code中运行PySpark Notebook时遭遇Py4JJavaError错误
嘿,我注意到你在VS Code里搭配Miniforge运行PySpark Notebook时碰到了麻烦,先帮你理一理目前的环境配置,再给你几个实用的排查和解决方向:
你的现有环境配置
- VS Code
- Java 8 + Java SDK 11
- Spark 3.4.4 安装在
c:/spark,并在c:/hadoop/bin目录下添加了winutil和hadoop dll文件 - Python 3.11.0
- 最新版本的Miniforge
针对性解决建议
从你给出的代码片段(import sys import requests import json from pyspark.sql import SparkSes,应该是没写完的SparkSession)来看,大概率是环境配置或者版本兼容的问题,你可以按下面的步骤逐一排查:
统一Java环境并检查环境变量
Spark对Java版本的兼容性要求比较严格,建议你统一使用一个Java版本(比如Java 8或者11,不要同时混用两个版本的环境变量):- 把
JAVA_HOME指向你要使用的Java安装目录,并且添加到系统PATH中 - 确认
SPARK_HOME设置为c:/spark,HADOOP_HOME设置为c:/hadoop,这两个路径也要加入系统PATH - 验证方式:打开VS Code的终端(用Miniforge的终端),输入
echo %JAVA_HOME%、echo %SPARK_HOME%、echo %HADOOP_HOME%,确保输出的路径正确无误
- 把
匹配Winutils与Spark依赖的Hadoop版本
你下载的winutil和hadoop dll文件版本必须和Spark默认依赖的Hadoop版本对应!Spark 3.4.4默认依赖的是Hadoop 3.3.4,如果你用的是其他版本的winutils,很容易触发Py4JJavaError。赶紧检查下文件版本,换成对应3.3.4的版本试试。确保Miniforge环境中PySpark版本与本地Spark一致
在Miniforge的Python环境里,一定要安装和你本地Spark 3.4.4同版本的PySpark,避免版本不兼容:- 打开Miniforge终端,执行
pip install pyspark==3.4.4 - 执行
pip list | findstr pyspark确认安装的版本正确
- 打开Miniforge终端,执行
正确初始化SparkSession
你的代码开头没写完,正确的SparkSession初始化代码应该是这样的:import sys import requests import json from pyspark.sql import SparkSession spark = SparkSession.builder \ .master("local[*]") \ .appName("YourNotebookApp") \ .getOrCreate()另外要确认VS Code的Notebook内核选的是Miniforge的Python环境,别不小心用了系统默认的Python解释器。
确保终端环境一致
运行Notebook前,先在VS Code的终端里激活你的Miniforge环境(比如conda activate base,如果是自定义环境就换成对应的名称),再启动Notebook,这样能保证环境变量和依赖都加载正确。
备注:内容来源于stack exchange,提问作者lecarusin

