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

Posted

技术标签:

【中文标题】在 python 脚本中,如何忽略 Apache Pig 的 Python 装饰器以进行独立单元测试【英文标题】:In a python script how can I ignore Apache Pig's Python Decorators for standalone unit testing 【发布时间】:2013-08-14 05:33:38 【问题描述】:

我有一个 python 脚本,它在 Apache Pig 下的 Jython 中执行。它用@schemaFunction 分别定义了一些函数。 @outputSchemaFunction 装饰器。

我想在“正常的本地 Python 解释器”下使用 Pig 之外的独立 python 主脚本测试这些函数。但是当我在本地 Python 系统下运行脚本时,解释器抱怨:"NameError: name 'outputSchema' is not defined" 我知道独立Python 显然不支持这些装饰器。

如何在本地 Python 解释器中测试我的脚本?我可以以某种方式将调用脚本中的装饰器定义为“空”吗?或者是否有类似命令行选项来忽略装饰器?

【问题讨论】:

【参考方案1】:

我正在使用猪 0.10.0。

当模块被 pig 用作 UDF 时,它会将 __name__ 设置为 __lib__。通常,__name__ 设置为模块的实际名称(减去 .py)。因此,您可以在 if 块内为 outputSchemaoutputSchemaFunction 定义一些空装饰器。比如:

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 的顶部自行验证。

【讨论】:

完美运行。我正在使用猪 0.11.1。谢谢。

以上是关于在 python 脚本中,如何忽略 Apache Pig 的 Python 装饰器以进行独立单元测试的主要内容,如果未能解决你的问题,请参考以下文章

如何设置 Python 脚本以在 Apache 2.0 中工作?

在 Python 脚本中忽略 BigQuery use_avro_logical_types

如何在 GPU 上启用 php 运行 python 脚本? [关闭]

Apache 忽略 httpd.conf 分配的路径

如何将多行 python 脚本粘贴到 ConEmu 中?

apache_conf 如何通过Python脚本发送附带文本文件的电子邮件?