web-dev-qa-db-ja.com

AirflowでPythonOperatorにパラメーターを渡す方法

Airflowを使い始めたばかりですが、以下のようにパラメーターをPythonOperatorに渡す方法を誰かに教えてもらえますか?

t5_send_notification = PythonOperator(
    task_id='t5_send_notification',
    provide_context=True,
    python_callable=SendEmail,
    op_kwargs=None,
    #op_kwargs=(key1='value1', key2='value2'),
    dag=dag,
)

def SendEmail(**kwargs):
    msg = MIMEText("The pipeline for client1 is completed, please check.")
    msg['Subject'] = "xxxx"
    msg['From'] = "xxxx"
    ......
    s = smtplib.SMTP('localhost')
    s.send_message(msg)
    s.quit()

一部のパラメーターをt5_send_notificationの呼び出し可能変数SendEmailに渡せるようにしたいのですが、理想的には、ログ全体またはログの一部(基本的にはkwargsからのもの)を添付したいこれらの情報を収集する場所はt5_send_notificationだと思います。

どうもありがとうございました。

8
mdivk
  1. Dictオブジェクトをop_kwargsに渡します
  2. キーを使用して、自分の値にアクセスしますkwargs dict in python callable

    def SendEmail(**kwargs):
        print(kwargs['key1'])
        print(kwargs['key2'])
        msg = MIMEText("The pipeline for client1 is completed, please check.")
        msg['Subject'] = "xxxx"
        msg['From'] = "xxxx"
        ......
        s = smtplib.SMTP('localhost')
        s.send_message(msg)
        s.quit()
    
    
    t5_send_notification = PythonOperator(
        task_id='t5_send_notification',
        provide_context=True,
        python_callable=SendEmail,
        op_kwargs={'key1': 'value1', 'key2': 'value2'},
        dag=dag,
    )
    
17
Ryan Yuan

これはうまくいくはずです:

t5_send_notification = PythonOperator(
    task_id='t5_send_notification',
    provide_context=True,
    python_callable=SendEmail,
    op_kwargs={my_param='value1'},
    dag=dag,
)

def SendEmail(my_param,**kwargs):
    print(my_param) #'value_1'
    msg = MIMEText("The pipeline for client1 is completed, please check.")
    msg['Subject'] = "xxxx"
    msg['From'] = "xxxx"
    ......
    s = smtplib.SMTP('localhost')
    s.send_me
2
ethanenglish