You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Databricks中Pytest Fixture初始化SparkSession报错求助

解决Databricks中Pytest Fixture初始化SparkSession的"Master URL not set"问题

核心原因

在Databricks环境中,SparkSession是全局预初始化的,直接调用SparkSession.builder.getOrCreate()会尝试创建全新的本地Session(而非复用Databricks提供的集群Session),这就会触发"Master URL not set"错误。

正确的Fixture实现方式

修改Testcases/conftest.py中的SparkSession Fixture,直接复用Databricks已有的Session,而非通过Builder重新创建:

import pytest
from pyspark.sql import SparkSession

@pytest.fixture(scope="session", autouse=True)
def spark():
    # 优先获取Databricks预初始化的集群级SparkSession
    active_session = SparkSession.getActiveSession()
    if active_session:
        return active_session
    # 仅在本地调试(非Databricks集群)时兜底创建Session
    return SparkSession.builder.getOrCreate()

为什么这样有效?

  • SparkSession.getActiveSession()会直接返回Databricks环境中已存在的、配置完整的集群Session,自带正确的Master URL和集群资源配置。
  • 兜底的getOrCreate()仅用于本地开发调试场景,保证Fixture在非Databricks环境下也能正常运行。

额外验证与注意事项

  • Runner Notebook中调用pytest的示例代码(无需额外传递Spark配置):
    import subprocess
    import sys
    
    # 切换到项目根目录执行pytest
    result = subprocess.run(
        [sys.executable, "-m", "pytest", "./Testcases", "-v"],
        capture_output=True,
        text=True
    )
    print("测试输出:\n", result.stdout)
    if result.stderr:
        print("错误信息:\n", result.stderr)
    
  • 测试类中正确依赖Fixture的示例:
    from Reusables.DataOperations import load_sample_data
    
    class TestDataValidation:
        def test_data_not_empty(self, spark):
            df = load_sample_data(spark, "/dbfs/path/to/test/data")
            assert df.count() > 0, "测试数据集为空"
    
  • 确保Databricks集群的Spark版本与本地开发环境(若有)一致,避免版本兼容性问题。

内容的提问来源于stack exchange,提问作者Sudhakar T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 14:05:55