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
相关产品推荐
相关产品推荐

