PySpark本地运行报错:Py4JJavaError与EOFException求助
PySpark df.show()触发Py4JJavaError:Python Worker意外退出(EOFException)
我按照教程在本地PC练习PySpark,严格执行步骤,但运行测试代码时在df.show()处报错。错误日志显示Py4JJavaError,根源是Python worker意外退出(崩溃),伴随java.io.EOFException。我已经试过更换Spark 3.4.2版本,问题依旧。
当前环境版本:
- Python 3.12.1
- Java 17.0.10
- Spark 3.5.0(也试过3.4.2)
运行的代码:
# Set the PySpark environment variables import os os.environ['SPARK_HOME'] = r"C:\Users\nba_b\OneDrive\Documents\apps\spark-3.5.0-bin-hadoop3" os.environ['PYSPARK_DRIVER_PYTHON'] = 'jupyter' os.environ['PYSPARK_DRIVER_PYTHON_OPTS'] = 'lab' os.environ['PYSPARK_PYTHON'] = 'python' # Import PySpark from pyspark.sql import SparkSession # Create a SparkSession spark = SparkSession.builder.appName("PySpark-Get-Started").getOrCreate() # Test the setup data = [("Alice", 25), ("Bob", 30), ("Charlie", 35)] df = spark.createDataFrame(data, ["Name", "Age"]) # Show the DataFrame df.show()
可能的解决方案
1. 降级Python版本解决兼容性问题
Spark 3.5.0和3.4.2官方支持的Python版本最高到3.11,Python 3.12属于较新版本,存在兼容性适配缺口。建议降级到Python 3.11.x版本(比如3.11.8):
- 卸载当前Python 3.12,安装Python 3.11.x
- 修改
PYSPARK_PYTHON环境变量,指向新安装的Python完整路径,示例:os.environ['PYSPARK_PYTHON'] = r"C:\Python311\python.exe"
2. 调整Jupyter相关环境变量
当前设置的PYSPARK_DRIVER_PYTHON和PYSPARK_DRIVER_PYTHON_OPTS在Jupyter Lab环境中可能引发冲突:
- 直接删除这两行配置,因为在Jupyter中运行时,Spark会自动复用当前Jupyter绑定的Python环境,无需额外指定驱动Python为
jupyter - 若需保留配置,明确指定Python可执行文件的完整路径,避免系统路径混淆
3. 迁移Spark安装目录
你的Spark安装在OneDrive目录下,可能因文件同步、权限限制导致Python worker无法正常读取依赖文件:
- 将Spark解压到本地非同步目录,比如
C:\apps\spark-3.5.0-bin-hadoop3 - 更新
SPARK_HOME环境变量到新路径
4. 验证Java环境配置
确保Java 17的环境配置正确:
- 在命令行执行
echo %JAVA_HOME%,确认路径无空格、特殊字符,且指向Java 17的安装根目录 - 检查系统PATH中是否包含Java的
bin目录
5. 查看详细日志定位问题
开启Spark详细日志,排查worker崩溃的具体原因:
spark = SparkSession.builder \ .appName("PySpark-Get-Started") \ .config("spark.driver.log.level", "DEBUG") \ .getOrCreate()
同时可查看SPARK_HOME\logs目录下的worker日志文件,获取崩溃时的详细报错信息。
内容的提问来源于stack exchange,提问作者slugspit
相关产品推荐
相关产品推荐

