首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python运算符中的Airflow宏

Python运算符中的Airflow宏
EN

Stack Overflow用户
提问于 2018-06-06 04:12:20
回答 2查看 3.2K关注 0票数 5

我试图在我的Python操作符中使用Airflow宏,但我一直收到"airflow: error: unrecognized:“

所以我导入了一个有3个位置参数的函数:(sys.argv,start_date,end_date),我希望把start_date和end_date作为Airflow中的执行日期。

函数参数如下所示

代码语言:javascript
复制
def main(argv,start_date,end_date):

这是我在DAG中的任务:

代码语言:javascript
复制
t1 = PythonOperator(
    task_id='Pull_DCM_Report',
    provide_context=True,
    python_callable=main,
    op_args=[sys.argv,'{{ ds }}','{{ ds }}'],
    dag=dag)
EN

回答 2

Stack Overflow用户

发布于 2018-06-06 04:51:00

由于您传递的是需要由Airflow呈现的日期,因此需要在Python操作符中使用templates_dict参数。此字段是Airflow将识别为包含模板的唯一字段。

您可以创建一个自定义Python操作符,通过复制现有操作符并将相关字段添加到template_fields元组中,将更多字段识别为模板。

代码语言:javascript
复制
def main(**kwargs):
    argv = kwargs.get('templates_dict').get('argv')
    start_date = kwargs.get('templates_dict').get('start_date')
    end_date = kwargs.get('templates_dict').get('end_date')


t1 = PythonOperator(task_id='Pull_DCM_Report',
                    provide_context=True,
                    python_callable=main,
                    templates_dict={'argv': sys.argv,
                                    'start_date': '{{ yesterday_ds }}',
                                    'end_date': '{{ ds }}'},
                    dag=dag)
票数 9
EN

Stack Overflow用户

发布于 2018-06-07 01:00:03

您可以使用以下代码“包装”对main函数的调用:

代码语言:javascript
复制
t1 = PythonOperator(
    task_id='Pull_DCM_Report',
    provide_context=True,
    python_callable=lambda **context: main([], context["ds"], context["ds"]),
    dag=dag)

如果lambda不是你喜欢的,你可以定义一个函数,调用它,然后让它调用main

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50708226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档