我在使用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
答案 0 :(得分:2)
我不知道我的答案是否来得太晚,但我设法在UDF中导入simplejson。
我是这样做的:
我下载了simplejson并将其放入lib文件夹,然后在我的UDF中我这样做了:
import sys
sys.path.append('/path/to/your/lib/folder')
import simplejson as json
然后我设法在我的集群上没有任何问题地执行json.loads()。
希望有所帮助