Airflow:PythonOperator:为什么要包含'ds'arg?

sub*_*bba 14 airflow

在定义一个稍后用作python_callable的函数时,为什么'ds'被包含在函数的第一个arg中?

例如:

def python_func(ds, **kwargs):
    pass
Run Code Online (Sandbox Code Playgroud)

我查看了Airflow文档,但找不到任何解释.

Dmi*_*ine 29

这与provide_context=True参数有关.根据Airflow文档,

如果设置为true,Airflow将传递一组可在您的函数中使用的关键字参数.这组kwargs完全对应于你在jinja模板中可以使用的内容.为此,您需要在函数头中定义**kwargs.

ds是这些关键字参数之一,表示格式为"YYYY-MM-DD"的执行日期.对于在文档中标记为(模板化)的参数,可以使用'{{ ds }}'默认变量来传递执行日期.您可以在此处阅读有关默认变量的更多信

https://pythonhosted.org/airflow/code.html?highlight=pythonoperator#default-variables(已废弃)

https://airflow.incubator.apache.org/concepts.html?highlight=python_callable

PythonOperator没有模板化参数,所以做类似的事情

python_callable=print_execution_date('{{ ds }}')
Run Code Online (Sandbox Code Playgroud)

不行.要在PythonOperator的可调用函数内打印执行日期,您必须这样做

def print_execution_date(ds, **kwargs):
    print(ds)
Run Code Online (Sandbox Code Playgroud)

要么

def print_execution_date(**kwargs):
    print(kwargs.get('ds'))
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • 如果你定义你的函数就像`def something(**kwargs)`那么你得到一个错误"意外的关键字参数'dag'传递给python_callable(*op_args,**op_kwargs)"所以看起来你需要有别的东西,我真的不明白它,但在**kwargs之前使用任何这些关键字参数似乎都有效. (3认同)