Windows环境下PySpark执行collect()时意外终止问题求助
根本解决方案
针对Windows Server 2022环境下PySpark 4.0.1搭配Python 3.12出现的Python worker exited unexpectedly错误,以下是几个根本修复方向:
1. 修正Python路径的环境变量配置
- 同时设置
PYSPARK_DRIVER_PYTHON环境变量,值与PYSPARK_PYTHON一致:PYSPARK_DRIVER_PYTHON=C:\Program Files\Python312\python.exe - 若路径包含空格,改用Windows短路径格式(通过
dir /x命令查看对应短路径),例如将C:\Program Files\Python312替换为C:\PROGRA~1\Python312,避免Java进程解析带空格路径时出错:PYSPARK_PYTHON=C:\PROGRA~1\Python312\python.exe PYSPARK_DRIVER_PYTHON=C:\PROGRA~1\Python312\python.exe - 修改后重启命令行或系统,确保环境变量生效。
2. 升级PySpark至兼容Python 3.12的版本
Spark 4.0.1对Python 3.12的Windows平台支持存在兼容性问题,建议升级到Spark 4.0.2及以上版本(官方已在后续版本修复了Python 3.12的适配问题)。下载对应Hadoop版本的Spark包,更新SPARK_HOME环境变量并替换PATH中的Spark路径。
3. 确保Hadoop Windows依赖文件完整且匹配
- 确认
HADOOP_HOME\bin目录下存在对应Hadoop 3.x版本的winutils.exe和hadoop.dll(需64位版本,适配Windows Server 2022)。 - 若文件缺失或版本不匹配,下载对应版本的Hadoop Windows二进制包替换现有文件,避免因依赖缺失导致路径解析错误。
4. 手动修复PySpark Worker启动脚本
若上述方案无效,可修改PySpark的worker启动逻辑:
- 打开
SPARK_HOME\python\pyspark\daemon.py文件 - 找到启动Python进程的
subprocess.Popen相关代码段 - 将
python_exec参数用双引号包裹,确保带空格的路径被正确解析:
注意添加# 修改前 proc = subprocess.Popen([python_exec] + args, ...) # 修改后 proc = subprocess.Popen([f'"{python_exec}"'] + args, shell=True, ...)shell=True参数,确保命令行正确解析带引号的路径。
内容的提问来源于stack exchange,提问作者EdH
相关产品推荐
相关产品推荐

