在 Jython 的 Pig UDF 中导入外部库时出现错误 1121
Posted
技术标签:
【中文标题】在 Jython 的 Pig UDF 中导入外部库时出现错误 1121【英文标题】:Error 1121 importing external library in Pig UDF in Jython 【发布时间】:2014-02-01 21:42:46 【问题描述】:我在 jython 中使用 python 库 simplejson 编写 Pig UDF 时遇到问题。我需要,因为 jython-standalone-2.5.2.jar 没有 JSON 库。我正在使用 2013 年 9 月 3 日 20:25:46 编译的 Apache Pig 版本 0.11.0-cdh4.4.0(重新导出),并根据文档 http://pig.apache.org/docs/r0.11.1/udf.html#python-advanced“您可以在 Python 脚本中导入 Python 模块。Pig 解析 Python递归依赖,这意味着 Pig 将自动将所有依赖的 Python 模块发送到后端。Python 模块应在 jython 搜索路径中找到:JYTHON_HOME、JYTHON_PATH 或当前目录。"。所以我从https://pypi.python.org/pypi/simplejson/ 下载库,将其解压缩到我的工作目录中,然后我的脚本在本地模式下工作(使用-x local)。尽管如此,在集群模式下,我在任务跟踪器的失败日志中收到此错误:
Caused by: org.apache.pig.backend.executionengine.ExecException: ERROR 1121: Python Error. Traceback (most recent call last):
File "ejercicio4-udfs.py", line 8, in <module>
ImportError: No module named simplejson
at org.apache.pig.scripting.jython.JythonScriptEngine$Interpreter.execfile(JythonScriptEngine.java:231)
at org.apache.pig.scripting.jython.JythonScriptEngine$Interpreter.init(JythonScriptEngine.java:158)
at org.apache.pig.scripting.jython.JythonScriptEngine.getFunction(JythonScriptEngine.java:349)
at org.apache.pig.scripting.jython.JythonFunction.<init>(JythonFunction.java:55)
... 92 more
Caused by: Traceback (most recent call last):
File "ejercicio4-udfs.py", line 8, in <module>
ImportError: No module named simplejson
我尝试了几件事,例如压缩 simplejson 并注册 zip 并尝试使用 sys.path.append('simplejson.zip') 访问它,我也尝试过:
export JYTHONPATH=$JYTHONPATH:$(pwd)/simplejson.zip; pig script.pig
还有
pig -Dmapred.cache.files="simplejson.zip#simplejson.zip" -Dmapred.create.symlink=yes script.zip
【问题讨论】:
【参考方案1】:我不知道我的回答是不是来得太晚了,但我设法在 UDF 中导入了 simplejson。
我是这样做的:
我下载了 simplejson 并将其放入 lib 文件夹,然后在我的 UDF 中我这样做了:
import sys
sys.path.append('/path/to/your/lib/folder')
import simplejson as json
然后我设法在我的集群上执行 json.loads() 没有任何问题。
希望对你有帮助
【讨论】:
以上是关于在 Jython 的 Pig UDF 中导入外部库时出现错误 1121的主要内容,如果未能解决你的问题,请参考以下文章