Windows本地pytest创建SparkSession卡顿,本地及CI/CD机需配置Spark吗?
PySpark pytest卡顿问题解决方案
核心问题答复
- 本地Windows机器运行该测试需要配置完整Spark运行环境,你遇到的SparkSession初始化卡顿,是Windows下Spark依赖配置不完整的典型表现。
- 后续测试接入CI/CD流程时,构建机器同样需要配置对应Spark运行环境,保证测试正常执行。
本地Windows环境修复步骤
- 依赖补充:pip安装的pyspark默认内置Spark运行时,但Windows系统必须额外安装与Spark版本匹配的
winutils工具,缺失该工具会导致Spark初始化静默卡住无报错。 - 环境变量配置:
- 新增
SPARK_HOME系统变量,值为Spark根目录,pip安装的pyspark默认路径为Python安装目录/Lib/site-packages/pyspark - 新增
HADOOP_HOME系统变量,值为winutils解压后的根目录 - 将
%SPARK_HOME%\bin、%HADOOP_HOME%\bin两个路径添加到系统Path变量中
- 新增
- 测试代码优化:当前代码没有主动释放SparkSession资源,多次运行后残留进程会导致后续初始化卡住,建议使用pytest fixture统一管理Spark生命周期,示例代码如下:
from pyspark.sql import SparkSession import pytest # 全局单例Spark实例,测试会话周期内复用 @pytest.fixture(scope="session") def spark_session(): spark = SparkSession.builder.master("local[1]").appName("pyspark-test").getOrCreate() yield spark # 测试结束后主动停止实例释放资源 spark.stop() def test_poc(spark_session): # 直接使用fixture传入的Spark实例即可 df = spark_session.createDataFrame(data, schema) # 后续测试逻辑
CI/CD环境配置说明
- Linux构建机无需配置winutils,只需要安装对应版本的Spark,配置
SPARK_HOME环境变量即可;优先选择预装了pyspark、Spark依赖的Docker镜像作为CI运行环境,可避免环境不一致问题。 - CI运行时建议使用
local[1]作为Spark master,减少多线程资源抢占导致的测试不稳定。
内容的提问来源于stack exchange,提问作者user9297554
相关产品推荐
相关产品推荐

