PySpark调用.show()查看DataFrame遇Py4JJavaError错误求助
PySpark DataFrame.show() 抛出Py4JJavaError(EOFException)解决方案
问题重现
调用PySpark DataFrame的.show()方法时触发Py4JJavaError,核心异常为java.io.EOFException,错误栈片段如下:
Py4JJavaError Traceback (most recent call last) c:\Users\user\Documents\Python Programming\PySpark_for_Big_Data.ipynb Cell 20 line 1 ----> 1 ds.show() File C:\spark\spark-3.5.1-bin-hadoop3\python\pyspark\sql\dataframe.py:945, in DataFrame.show(self, n, truncate, vertical) ... Caused by: java.io.EOFException at java.base/java.io.DataInputStream.readInt(DataInputStream.java:386) at org.apache.spark.api.python.PythonRunner$$anon$3.read(PythonRunner.scala:774) ... 26 more
环境信息
- 本地Spark版本:
spark-3.5.1-bin-hadoop3 - Pip安装的PySpark:已安装
- 环境变量:
- HADOOP_HOME:
C:\hadoop(含Hadoop3版本winutils) - SPARK_HOME:
C:\spark\spark-3.5.1-bin-hadoop3 - JAVA_HOME:
C:\Program Files\Java\jdk-20 - SPARK_LOCAL_IP:
127.0.0.1 - PYTHONPATH:
%SPARK_HOME%\python;%SPARK_HOME%\python\lib\py4j-0.10.9.7-src.zip - PATH: 包含
%HADOOP_HOME%\bin、%SPARK_HOME%\bin
- HADOOP_HOME:
- 软件版本:
- Java:
java 20.0.2 2023-07-18 - Python:
Python 3.12.0 - Spark:
Spark 3.5.1 - VS Code内核:
%USERPROFILE%\AppData\Local\Programs\Python\Python312\python.exe
- Java:
解决方案
1. 修正Python版本兼容性
Spark 3.5.1官方仅支持Python 3.8~3.11,Python 3.12不在兼容列表中,这是触发EOFException的常见原因:
- 降级Python到3.11.x版本,重新配置VS Code使用对应Python内核
- 确保项目虚拟环境绑定降级后的Python版本
2. 统一PySpark与本地Spark版本
同时存在本地Spark包和pip安装的PySpark时,易出现版本不匹配:
- 执行
pip show pyspark查看安装版本,确保与本地Spark的3.5.1完全一致 - 若版本不一致,卸载现有PySpark:
pip uninstall pyspark -y,再安装指定版本:pip install pyspark==3.5.1
3. 更换兼容的Java版本
Spark 3.5.1支持的Java版本为8、11、17,Java 20属于非兼容版本:
- 安装Java 17(推荐LTS版本),修改
JAVA_HOME环境变量指向Java 17的安装路径 - 更新PATH变量,将
%JAVA_HOME%\bin移到最前端,避免系统优先调用旧版本Java
4. 验证Winutils配置
确保Hadoop的winutils版本与本地Spark绑定的Hadoop版本一致(Spark 3.5.1绑定Hadoop3):
- 检查
C:\hadoop\bin下的winutils.exe是否为Hadoop3.x版本 - 执行
winutils.exe chmod 777 C:\tmp\hive(若临时目录不存在先创建),修复Hive权限问题
5. 调整Spark运行配置
在初始化SparkSession时添加显式配置,避免跨进程通信异常:
from pyspark.sql import SparkSession spark = SparkSession.builder \ .master("local[*]") \ .appName("FixEOFException") \ .config("spark.driver.bindAddress", "127.0.0.1") \ .config("spark.executor.instances", "1") \ .getOrCreate()
6. 重启运行环境
- 关闭VS Code及所有Python进程,刷新环境变量(可重启电脑确保生效)
- 重新打开项目,使用新配置的Python内核运行代码
内容的提问来源于stack exchange,提问作者Uche Kalu
相关产品推荐
相关产品推荐

