Пользовательский оператор воздушного потока не возвращает значения - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь автоматизировать созданный мной пользовательский оператор в потоке воздуха, который читает из пользовательского плагина утилит то, что я создал, и он должен возвращать несколько значений.

Это пример созданной мной утилиты, которая считывает данные из s3, очищает их и преобразует.

ClassA:
 def __init__(self, *args, **kwargs):
     initialization

 def get_data(self):
     *******
     data import from s3 and 
     data processing script
     ********
  return A,B,C,D,E

И вот так выглядит мой пользовательский оператор

from util import classA
from airflow.models import BaseOperator
from airflow.plugins_manager import AirflowPlugin
from airflow.utils.decorators import apply_defaults
class SFScoreDataOperator(BaseOperator):
    @apply_defaults
  def __init__(self):
      Initialization parameters
  def execute(self, context):
    A,B,C,D,E = ClassA().get_data()

Что я пытаюсь сделать, передавая эти переменные A, B, C, D, E следующему оператору, но airflow выдает ошибку, говорящую

A,B,C,D,E = ClassA().get_data()
TypeError: 'tuple' object is not callable

Я был бы очень признателен, если бы Я могу получить помощь с этой ошибкой

1 Ответ

1 голос
/ 24 апреля 2020

Ваш метод get_data украшен декоратором @property, что означает, что он больше не вызывается ( это может быть, если вы вернули вызываемый объект, но это помимо точки ) - - декоратор заставляет метод get_data вести себя как атрибут, ваш A,B,C,D,E = ClassA().get_data() функционально эквивалентен этому:

A, B, C, D, E = ("Value A", "Value B", "Value C", "Value D", "Value E")
get_data = (A, B, C, D, E)
get_data() # <-- There's your problem, you can't call `tuple` objects.

TLDR : удалить декоратор @property из вашего SuccessFactorData.get_data или измените свое использование с A,B,C,D,E = ClassA().get_data() на A,B,C,D,E = ClassA().get_data - сделайте одно или другое, и вы должны прекратить получать ошибку.

...