【问题标题】:Airflow - got an unexpected keyword argument 'conf'气流 - 有一个意外的关键字参数“conf”
【发布时间】:2020-10-05 04:22:15
【问题描述】:

我正在学习 Apache Airflow 以在我的工作场所实施它, 我在尝试将参数传递给这样的函数时偶然发现了一个问题(我遵循了文档)

from airflow import DAG
import pendulum
from datetime import datetime, timedelta
from airflow.operators.python_operator import PythonOperator

args = {
    "owner": "airflow",
    "start_date": pendulum.datetime(year=2020, month=10, day=5, tzinfo='Asia/Shanghai'),
    "retries": 5,
    "retry_delay": timedelta(minutes=3)
}

dag = DAG(
    "example_dag_v2",
    schedule_interval="@daily",
    default_args=args
)

def my_mult_function(number):
    return number*number

mult_task = PythonOperator(
    task_id = 'mult_task',
    provide_context=True,
    python_callable=my_mult_function,
    op_kwargs={'number': 5},
    dag = dag
)

mult_task

我不断收到此错误

TypeError: my_mult_function() 得到了一个意外的关键字参数 'conf'

我哪里做错了?

解决方案:

所以我找到了解决方案,但仍然不明白为什么 解决办法是

def my_mult_function(number, **kwargs):
    return number*number

我在参数上传递了 **kwargs,它起作用了!但我还是不明白为什么我需要通过 **kwargs ?

【问题讨论】:

    标签: python airflow


    【解决方案1】:

    您已设置provide_context=True,因此PythonOperator 会将execute context 发送到您的python_callable。所以一个通用的 catch all 关键字参数,**kwargs 解决了这个问题。

    https://github.com/apache/airflow/blob/v1-10-stable/airflow/operators/python_operator.py#L108.

    如果您不打算使用上下文中的任何内容,请设置provide_context=False

    【讨论】:

    • 很好的答案,但链接已损坏。
    猜你喜欢
    • 2019-11-04
    • 2020-06-30
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    • 2016-09-12
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多