Skip to main content
 首页 » 编程设计

python之在 python 脚本中,如何忽略 Apache Pig 的独立单元测试的 Python 装饰器

2025年05月04日24JustinYoung

我有一个 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 的顶部来自行验证。