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

Pytest配置Spark-Avro依赖仍报错,已确认版本与路径求解决

解决PySpark测试中spark-avro依赖加载失败问题

问题根源

你当前的配置存在两个关键错误:

  • spark.jars.packages参数用于指定Maven仓库的依赖坐标(如org.apache.spark:spark-avro_2.13:3.3.0),不是本地jar文件路径,这会导致Spark尝试从远程仓库拉取依赖而非使用本地文件。
  • 同时配置spark.jars、spark.driver.extraClassPath会造成类路径冲突,local模式下仅需spark.jars即可正确加载本地jar。

修正后的Spark Fixture

使用绝对路径加载本地jar(避免相对路径的工作目录问题),并清理无效配置:

import os
from pyspark.sql import SparkSession
import pytest

@pytest.fixture(scope="session")
def spark():
    # 动态获取jar包的绝对路径,避免硬编码
    avro_jar_path = os.path.abspath("spark_jars/spark-avro_2.13-3.3.0.jar")
    spark = (
        SparkSession
        .builder
        .config("spark.jars", avro_jar_path)
        .master("local[*]")
        .getOrCreate()
    )
    yield spark
    spark.stop()

验证依赖是否加载成功

在测试用例中添加验证代码,确认jar已被加载:

def test_something(spark):
    # 打印已加载的jar列表,检查是否包含spark-avro的路径
    print("Loaded jars:", spark.sparkContext.listJars())
    df = spark.read.format("avro").load("some/path/simple.avro")
    # 后续测试逻辑

额外排查点

  • 确保运行pytest时的工作目录与spark_jars/所在目录一致,或直接使用绝对路径。
  • 检查是否存在其他创建SparkSession的代码,确保所有测试共用同一个fixture实例,避免依赖未被加载的session。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 02:17:44