Когда я пишу пользовательский оператор, он выполняет некоторый произвольный код Python в своем методе execute
:
class FooOperator(BaseOperator):
@apply_defaults
def __init__(self, some_arg: str, *args, **kwargs):
self.some_arg = arg
super().__init__(*args, **kwargs)
def execute(self, context):
return self.some_arg
Я также мог бы использовать PythonOperator
, который вызывает исполняемый файл, который делает то же самое как этот метод execute
делает:
def foo(some_arg: str):
return some_arg
...
PythonOperator(task_id="foo", python_callable=foo, op_args={"some_arg": "bar})
В чем разница между использованием пользовательского оператора и PythonOperator
и тем, что может помочь мне решить, какой из них использовать?