在Composer DAG传递参数时遭遇AirflowException报错求助
解决Airflow Composer中PythonOperator的
python_callable param must be callable错误 错误原因
PythonOperator的python_callable参数要求传入可调用的函数对象,但你直接写了脚本名py_script,既没有正确导入目标脚本中的函数,也没有指定要执行的具体函数(你的脚本里定义的是main函数),因此触发该异常。
修复步骤
1. 正确导入目标脚本中的函数
你的Python脚本位于/dir/folder/py_script.py,需在DAG文件中导入该脚本里的main函数,可通过两种方式实现:
方式一:手动添加脚本目录到Python路径
在DAG代码开头添加以下内容,将脚本所在目录加入Python的搜索路径:
import sys sys.path.append('/dir/folder') from py_script import main
方式二:利用Airflow配置的PYTHONPATH
如果/dir/folder已经配置在Airflow的PYTHONPATH环境变量中(Composer可通过环境变量配置),则直接导入即可:
from py_script import main
2. 修改PythonOperator配置
将python_callable的值从py_script改为导入的main函数,同时修正schedule_interval的错误写法(需用Python的None而非字符串'None'),最终DAG代码如下:
from datetime import datetime import models import python_operator import sys sys.path.append('/dir/folder') from py_script import main default_dag_args = { 'start_date': datetime(2023, 1, 1), 'catchup': False, 'retries': 0, } with models.DAG( 'test', schedule_interval=None, default_args=default_dag_args) as dag: t1 = python_operator.PythonOperator( task_id='t1_task', python_callable=main, op_kwargs={'PARAM1':'TEST', 'FILE':'gs://bucket/file.xlsx'}, dag=dag ) t1
额外注意事项
- 确保
/dir/folder目录在Composer环境中可访问,若脚本存放在GCS,需挂载到Composer worker节点;若放在DAG目录的子文件夹中,无需手动添加sys.path。
内容的提问来源于stack exchange,提问作者kmr
相关产品推荐
相关产品推荐

