在 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 块内为 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
的顶部自行验证。
【讨论】:
完美运行。我正在使用猪 0.11.1。谢谢。以上是关于在 python 脚本中,如何忽略 Apache Pig 的 Python 装饰器以进行独立单元测试的主要内容,如果未能解决你的问题,请参考以下文章
如何设置 Python 脚本以在 Apache 2.0 中工作?
在 Python 脚本中忽略 BigQuery use_avro_logical_types