错误1121在Jython中导入Pig UDF中的外部库

时间:2014-02-01 21:42:47

标签: python apache-pig jython user-defined-functions

我在使用jython中的python库simplejson写一个Pig UDF时遇到了问题。我需要因为jython-standalone-2.5.2.jar没有附带JSON库。我正在使用Apache Pig版本0.11.0-cdh4.4.0(rexported)编译于2013年9月3日,20:25:46,并根据文档http://pig.apache.org/docs/r0.11.1/udf.html#python-advanced“您可以在Python脚本中导入Python模块。递归地解析Python依赖项,这意味着Pig会自动将所有依赖的Python模块发送到后端。应该在jython搜索路径中找到Python模块: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 个答案:

答案 0 :(得分:2)

我不知道我的答案是否来得太晚,但我设法在UDF中导入simplejson。

我是这样做的:

我下载了simplejson并将其放入lib文件夹,然后在我的UDF中我这样做了:

import sys
sys.path.append('/path/to/your/lib/folder')
import simplejson as json

然后我设法在我的集群上没有任何问题地执行json.loads()。

希望有所帮助