2016-11-10 4 views
5

Beim Definieren einer Funktion, die später als python_callable verwendet werden soll, warum wird 'ds' als erstes arg der Funktion eingefügt?Airflow: PythonOperator: Warum "ds" arg?

Zum Beispiel:

def python_func(ds, **kwargs): 
    pass 

Ich schaute in die Airflow Dokumentation, konnte aber keine Erklärung finden.

Antwort

17

Dies steht im Zusammenhang mit dem Parameter . Gemäß der Airflow-Dokumentation,

Wenn auf True gesetzt, wird Airflow eine Reihe von Schlüsselwortargumenten übergeben, die in Ihrer Funktion verwendet werden können. Diese Kwarts entsprechen genau dem, was Sie in Ihren jinja Vorlagen verwenden können. Damit dies funktioniert, müssen Sie ** kwargs in Ihrem Funktionskopf definieren.

ds ist eine dieser Keyword-Argumente und stellt Ausführungsdatum im Format "YYYY-MM-DD". Für Parameter, die in der Dokumentation als (Templates) gekennzeichnet sind, können Sie das Ausführungsdatum mit der Standardvariable '{{ ds }}' übergeben. Sie können mehr über Standardvariablen hier lesen: https://pythonhosted.org/airflow/code.html?highlight=pythonoperator#default-variables

PythonOperator hat keine Template-Parameter, so etwas wie python_callable=print_execution_date('{{ ds }}') wird nicht funktionieren. Um die Ausführung Datum innerhalb der aufrufbaren Funktion Ihres PythonOperator zu drucken, werden Sie es zu tun haben, als

def print_execution_date(ds, **kwargs): print(ds)

oder

def print_execution_date(**kwargs): print(kwargs.get('ds'))

Hoffnung, das hilft.

+0

Willkommen bei Stack Überlauf! Das sieht nach einer gut durchdachten und formatierten Antwort aus. Vielen Dank für Ihren Beitrag https://stackoverflow.com/help/how-to-answer – Aron

+0

Wenn Sie Ihre Funktion wie 'def etwas (** kwargs)' definieren, dann erhalten Sie einen Fehler "unerwartetes Schlüsselwort Argument 'dag' weitergegeben python_callable (* op_args, ** op_kwargs) "so scheint es, als ob du etwas anderes haben musst, ich verstehe es nicht wirklich, aber die Verwendung eines dieser Schlüsselwortparameter vor ** kwargs scheint zu funktionieren. – Davos