本地PySpark3.2.1环境调用DataFrame.show()报Py4JJavaError排查
问题成因
核心原因是JDK版本与PySpark 3.2.1不兼容:PySpark 3.2.x官方仅支持JDK 8、JDK 11两个版本,当前使用的JDK 18版本过高,跨版本的接口变更会导致Spark拉起的Python worker进程无法和JVM端建立回连,和报错信息里的Python worker failed to connect back完全对应。
同报错的其他常见诱因:
PYSPARK_PYTHON环境变量配置错误,Spark找不到可用的Python解释器启动worker进程- Windows本地环境未配置
HADOOP_HOME、缺少对应版本的winutils.exe,本地文件系统权限异常阻断进程通信 - 代码里虽然导入了
pyspark.pandas as ps,但实际创建的是普通Spark DataFrame,这个冗余导入和报错无关。
解决方案
按优先级依次操作即可:
- 降级JDK版本(首选方案)
卸载现有JDK 18,安装JDK 11(OpenJDK 11、Temurin 11均可),配置JAVA_HOME环境变量指向JDK 11安装目录,将%JAVA_HOME%\bin加入系统Path,命令行执行java -version确认版本切换成功后,重启IDE/终端再运行代码。 - 显式指定PySpark使用的Python解释器
初始化SparkSession前,固定PySpark的Python路径,避免环境变量冲突,修改后的初始化代码如下:import os import sys from pyspark.sql import SparkSession # 绑定当前运行环境的Python解释器 os.environ['PYSPARK_PYTHON'] = sys.executable os.environ['PYSPARK_DRIVER_PYTHON'] = sys.executable spark = SparkSession\ .builder\ .master('local[*]')\ .appName('test')\ .getOrCreate() - Windows环境补全Hadoop本地依赖
下载Hadoop 3.2对应版本的winutils.exe、hadoop.dll文件,放入Hadoop安装目录的bin文件夹;配置HADOOP_HOME环境变量指向Hadoop 3.2安装根目录,将%HADOOP_HOME%\bin加入系统Path后重启终端生效。
内容的提问来源于stack exchange,提问作者Wakame
相关产品推荐
相关产品推荐

