自定义气流操作员不返回值

时间:2020-04-23 19:18:56

标签: python-3.x airflow

我正在尝试自动化我在气流中创建的自定义运算符,该运算符将从自定义util插件读取我构建的内容,并且它应该返回多个值。

这是我构建的一个util的示例,该util从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变量传递给下一个运算符,但是气流引发错误,提示

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

如果能获得有关此错误的帮助,我将非常感谢

1 个答案:

答案 0 :(得分:1)

您的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-做一个或另一个并且应该停止接收错误。