在定义稍后用作python_callable的函数时,为什么' ds'作为函数的第一个arg包括在内?
例如:
def python_func(ds, **kwargs):
pass
我查看了Airflow文档,但找不到任何解释。
答案 0 :(得分:25)
这与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 }}')
没有工作。要在PythonOperator的可调用函数内打印执行日期,您必须按
进行操作def print_execution_date(ds, **kwargs):
print(ds)
或
def print_execution_date(**kwargs):
print(kwargs.get('ds'))
希望这有帮助。