我正在尝试自动化我在气流中创建的自定义运算符,该运算符将从自定义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
如果能获得有关此错误的帮助,我将非常感谢
答案 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
-做一个或另一个并且应该停止接收错误。