Windows下PySpark启动报错:Python Worker无法连接求助
解决PySpark "Python worker failed to connect back" 问题
针对你遇到的PySpark Python worker连接超时问题,以下是几种可行的解决方法:
1. 显式指定Python解释器路径
Spark可能无法自动识别conda环境中的Python解释器,需要在初始化SparkSession时明确指定:
from pyspark.sql import SparkSession from datetime import datetime, date spark = SparkSession.builder \ .config("spark.pyspark.python", "/your/conda/env/bin/python") \ .config("spark.pyspark.driver.python", "/your/conda/env/bin/python") \ .getOrCreate() # 后续代码保持不变 rdd = spark.sparkContext.parallelize([ (1, 2., 'string1', date(2000, 1, 1), datetime(2000, 1, 1, 12, 0)), (2, 3., 'string2', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)), (3, 4., 'string3', date(2000, 3, 1), datetime(2000, 1, 3, 12, 0)) ]) df = spark.createDataFrame(rdd, schema=['a', 'b', 'c', 'd', 'e']) df.printSchema()
也可以通过环境变量全局设置:
export PYSPARK_PYTHON=/your/conda/env/bin/python export PYSPARK_DRIVER_PYTHON=/your/conda/env/bin/python
2. 延长Python worker连接超时时间
默认的连接超时时间较短,若conda环境启动较慢容易触发超时,可修改配置延长超时:
spark = SparkSession.builder \ .config("spark.python.worker.connectionTimeout", "60000") # 设置为60秒(单位:毫秒) .getOrCreate()
或者在spark-defaults.conf中添加配置:
spark.python.worker.connectionTimeout 60000
3. 检查本地网络与资源限制
- 临时关闭本地防火墙,测试是否是防火墙阻断了worker与driver的通信
- 确保没有其他进程占用Spark默认使用的端口范围,可通过
netstat或ss命令排查
4. 降低本地模式的并行度
本地模式下并行度过高可能导致资源不足,限制executor数量和核心数:
spark = SparkSession.builder \ .config("spark.executor.instances", "1") \ .config("spark.cores.max", "1") \ .getOrCreate()
5. 清理Spark临时文件
删除/tmp目录下的Spark临时缓存文件(命名以spark-开头),避免旧缓存导致的异常。
内容的提问来源于stack exchange,提问作者mike-egg123
相关产品推荐
相关产品推荐

