我有一个 python 脚本,它在 Apache Pig 下的 Jython 中执行。它用 @schemaFunction 定义了一些函数。 @outputSchemaFunction 装饰器。
我想在“正常的本地 Python 解释器”下使用 Pig 外部的独立 python 主脚本测试这些函数。但是,当我在本地 Python 系统下运行脚本时,解释器会提示:“NameError: name ' outputSchema' is not defined" 我知道独立的 Python 显然不支持这些装饰器。
如何在本地 Python 解释器中测试我的脚本?我能以某种方式将调用脚本中的装饰器定义为“空”吗?或者是否有类似命令行选项的东西来忽略装饰器?
请您参考如下方法:
我使用的是 pig 0.10.0。
当 pig 将模块用作 UDF 时,它会将 __name__ 设置为 __lib__。通常,__name__ 设置为模块的实际名称(减去 .py)。因此,您可以在 if block 内为 outputSchema 和 outputSchemaFunction 定义一些空装饰器。像这样的东西:
myudfs.py
#!/usr/bin/python
if __name__ != '__lib__':
def outputSchema(dont_care):
def wrapper(func):
def inner(*args, **kwargs):
return func(*args, **kwargs)
return inner
return wrapper
# Your UDFs go here
您可以通过将 print __name__ 放在 myudfs.py 的顶部来自行验证。
