PySpark入门执行简单代码遇Python Worker崩溃问题求助
PySpark Python Worker 崩溃问题排查方案
问题描述
运行以下PySpark代码时,执行rdd2.collect()触发Python Worker意外崩溃:
from pyspark import SparkConf, SparkContext conf = SparkConf().setAppName('Read File') sc = SparkContext.getOrCreate(conf=conf) rdd = sc.textFile('data1.txt') print(rdd.collect()) rdd2 = rdd.map(lambda x: x.split(' ')) print(rdd2.collect())
报错信息:
ERROR Executor: Exception in task 1.0 in stage 2.0 (TID 5)/ 2] org.apache.spark.SparkException: Python worker exited unexpectedly (crashed)
本地环境配置:
- Windows 10(通过cmd.exe运行)
- Python 3.12.1
- Java 11.0.20
- Spark 3.5.0
- Hadoop 3.3.6
已配置JAVA_HOME、SCALA_HOME、HADOOP_HOME、SPARK_HOME、PYSPARK_PYTHON、PYSPARK_DRIVER_PYTHON(后两项指向Python安装目录下的python.exe),尝试过重装组件、更换版本、调整环境变量,问题仍未解决。
排查与解决步骤
1. 降级Python版本至兼容范围
Spark 3.5.0官方仅支持Python 3.8~3.11版本,Python 3.12属于未正式适配版本,存在底层API兼容性问题。建议将Python降级到3.11.x版本,这是此类问题最常见的修复方案。
2. 验证权限与运行方式
Windows环境下,确保当前用户对Python安装目录、Spark目录拥有读写权限;尝试以管理员身份启动cmd,再运行脚本,避免权限不足导致Worker进程启动失败。
3. 修复Hadoop winutils依赖
Windows下Spark依赖Hadoop的winutils.exe组件,需确认:
HADOOP_HOME指向的目录下存在bin/winutils.exe(版本需与Hadoop 3.3.6匹配)HADOOP_HOME/bin已添加至系统PATH环境变量- 手动执行
winutils.exe,确认无报错弹出
4. 获取详细崩溃日志
Spark Worker崩溃通常有更具体的错误信息,可通过以下方式获取:
- 运行脚本时添加
--verbose参数,查看Python Worker启动时的控制台输出 - 检查
%TEMP%\spark-*临时目录下的日志文件,找到Python Worker的stderr输出,定位具体崩溃原因
5. 显式指定Python路径
在代码中直接指定Python路径,避免环境变量冲突:
conf = SparkConf().setAppName('Read File') \ .set('spark.pyspark.python', 'C:/Python311/python.exe') \ .set('spark.pyspark.driver.python', 'C:/Python311/python.exe') sc = SparkContext.getOrCreate(conf=conf)
注意路径使用正斜杠/或双反斜杠\\。
6. 测试最简代码排除文件问题
运行无外部文件依赖的最简代码,验证环境是否正常:
from pyspark import SparkConf, SparkContext conf = SparkConf().setAppName('Test') sc = SparkContext.getOrCreate(conf=conf) rdd = sc.parallelize(['a b c', 'd e f']) rdd2 = rdd.map(lambda x: x.split(' ')) print(rdd2.collect())
如果这段代码正常运行,说明问题出在data1.txt的内容(如特殊字符、编码问题);若仍报错,继续排查环境配置。
内容的提问来源于stack exchange,提问作者Roterun
相关产品推荐
相关产品推荐

