airflow.exceptions.AirflowException:初始化运算符时使用关键字参数

kee*_*kee 5 airflow

我在 Ubuntu 中使用 1.9.2 的 Airflow 版本和 Python 2.7。我试图从ParentOperator本身工作正常的类继承并创建一个名为ChildOperator. 但是当我创建一个ChildOperator实例时,我认为这里缺少一些关键字参数或弄乱了,我收到了这个错误:

airflow.exceptions.AirflowException:初始化运算符时使用关键字参数

这是一个简化的示例:

class ParentOperator(BaseOperator, SkipMixin):

    @apply_defaults
    def __init__(self,
             conn_id,
             object,
             args={},
             s3_conn_id=None,
             s3_key=None,
             s3_bucket=None,
             fields=None,
             *args,
             **kwargs
             ):

        super(ParentOperator, self).__init__(*args, **kwargs)
        ...


class ChildOperator(ParentOperator):

    @apply_defaults
    def __init__(self,
             conn_id,
             object,
             args={},
             s3_conn_id=None,
             s3_key=None,
             s3_bucket=None,
             fields=None,
             *args,
             **kwargs
             ):

        args=...
        super(ChildOperator, self).__init__(
            conn_id,
            object,
            args=args,
            s3_conn_id=s3_conn_id,
            s3_key=s3_key,
            s3_bucket=s3_bucket,
            fields=fields,
            *args,
            **kwargs
        )

...

myobjc = ChildOperator(
    conn_id="my_default",
    object=table,
    args={},
    s3_conn_id='s3_postgres_dump',
    s3_key=s3_key,
    s3_bucket=s3_bucket,
    dag=dag,
    task_id="task1"
)
Run Code Online (Sandbox Code Playgroud)

知道是什么导致了这个错误?这更像是 Python 特定的问题吗?

kee*_*kee 7

__init__function ofChildOperator需要具有如下所有关键字参数(对于conn_idand的前两个参数object):

super(ChildOperator, self).__init__(
        conn_id=conn_id,
        object=object,
        args=args,
        s3_conn_id=s3_conn_id,
        s3_key=s3_key,
        s3_bucket=s3_bucket,
        fields=fields,
        *args,
        **kwargs
)
Run Code Online (Sandbox Code Playgroud)