2016-11-10 18 views
5

Trong khi xác định một hàm để sau này được sử dụng như một python_callable, tại sao 'ds' được bao gồm làm hàm đầu tiên của hàm?Luồng không khí: PythonOperator: tại sao bao gồm 'ds' arg?

Ví dụ:

def python_func(ds, **kwargs): 
    pass 

Tôi nhìn vào tài liệu Airflow, nhưng không thể tìm thấy bất kỳ lời giải thích.

Trả lời

17

Điều này liên quan đến thông số provide_context=True. Theo tài liệu về Luồng không khí,

nếu được đặt thành true, Luồng khí sẽ chuyển một tập hợp các đối số từ khóa có thể được sử dụng trong chức năng của bạn. Bộ kwargs này tương ứng chính xác với những gì bạn có thể sử dụng trong các mẫu jinja của bạn. Để làm việc này, bạn cần xác định ** kwargs trong tiêu đề hàm của bạn.

ds là một trong các đối số từ khóa này và đại diện cho ngày thực thi theo định dạng "YYYY-MM-DD". Đối với các tham số được đánh dấu là (templated) trong tài liệu, bạn có thể sử dụng biến số mặc định '{{ ds }}' để vượt qua ngày thực thi. Bạn có thể đọc thêm về các biến mặc định tại đây: https://pythonhosted.org/airflow/code.html?highlight=pythonoperator#default-variables

PythonOperator không có tham số templated, do đó, thực hiện như python_callable=print_execution_date('{{ ds }}') sẽ không hoạt động. Để in ngày thực hiện bên trong hàm callable của PythonOperator của bạn, bạn sẽ phải làm điều đó như

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

hoặc

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

Hope this helps.

+0

Chào mừng bạn đến với Stack overflow! Điều này trông giống như một câu trả lời được suy nghĩ và định dạng tốt. Cảm ơn bạn đã đóng góp của bạn https://stackoverflow.com/help/how-to-answer – Aron

+0

Nếu bạn xác định hàm của mình như 'def something (** kwargs)' thì bạn sẽ gặp lỗi "đối số từ khóa không mong muốn 'dag' được chuyển đến python_callable (* op_args, ** op_kwargs) "do đó, có vẻ như bạn cần phải có cái gì khác, tôi không thực sự hiểu nó, nhưng sử dụng bất kỳ params từ khóa trước khi ** kwargs dường như làm việc. – Davos

Các vấn đề liên quan