Airflow中SparkSubmitOperator配置spark-avro依赖不生效问题
问题原因
你的代码存在两个核心错误,直接导致依赖配置不生效:
- 对Python字典的
update()方法理解错误:dict.update()是原地修改字典的方法,执行后不会返回新字典,返回值固定为None。你把conf.update()的返回值赋值给conf_sp,最终传入SparkSubmitOperator的conf参数实际是空值None,所有Spark配置都没有被正确传入。 - 配置传递方式冗余:
SparkSubmitOperator本身提供了packages参数专门用于传递spark-submit的--packages参数,对应拉取spark.jars.packages配置的依赖,不需要硬写在conf字典里,能避免不同Spark提交模式下的配置优先级问题。
修正方案
# 读取基础配置 conf = Variable.get("spark_conf", deserialize_json=True) # 直接原地更新配置字典,不要接收update的返回值 conf.update({ # 其他需要补充的Spark配置可以写在这里 }) op = SparkSubmitOperator( application="my_app", conf=conf, # 推荐直接通过packages参数传递Avro依赖,不需要写在conf里 packages="org.apache.spark:spark-avro_2.12:2.4.3", # 其余原有参数保持不变 .... )
额外排查点:请确认你集群部署的Spark 2.4.3对应的Scala编译版本,如果你集群的Spark是基于Scala 2.11编译的,需要把依赖改成
org.apache.spark:spark-avro_2.11:2.4.3,Scala版本不匹配也会导致Avro模块加载失败。
内容的提问来源于stack exchange,提问作者user3735871
相关产品推荐
相关产品推荐

