python - Airflow - 得到一个意外的关键字参数 'conf'

标签 python airflow

我正在学习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() got an unexpected keyword argument 'conf'


我哪里做错了?
解决方案:
所以我找到了解决方案,但仍然不明白为什么
解决办法是
def my_mult_function(number, **kwargs):
    return number*number
我在参数上传递了 **kwargs,它有效!但我仍然不明白为什么我需要通过 **kwargs ?

最佳答案

您已设置 provide_context=True 以便 PythonOperatorexecute context 发送到您的 python_callable 。因此,通用捕获所有关键字参数,**kwargs 解决了该问题。
https://github.com/apache/airflow/blob/v1-10-stable/airflow/operators/python_operator.py#L108
如果您不打算使用上下文中的任何内容,请设置provide_context=False

关于python - Airflow - 得到一个意外的关键字参数 'conf',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64202437/

相关文章:

python - 我怎样才能杀死我用 python 启动的进程

python - Airflow 中的着陆时间是什么意思?

python-3.x - 即使在 pandas 成功安装后, Airflow 中也没有名为 pandas 的模块错误

docker - dockerized算法的机器学习DAG,Luigi/Airflow/Celery

bash - Airflow 将参数传递给相关任务

python - 如何在 EmailOperator 任务的文件名中添加模板变量? (空 Airflow 动)

python - 给定一个单词列表,识别长度为 4 或更大的所有相同子串

Python Pandas 对齐单元格中的文本

python - 如何在 Jupyter Notebook 的引擎上正确导入模块以进行并行处理?

python - 是否可以连接 QuerySet?