error 1121在jython的pig udf中导入外部库

k7fdbhmy  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(630)

我在使用jython中的python库simplejson编写pig udf时遇到了问题。我需要,因为jython-standalone-2.5.2.jar没有附带json库。我使用的是ApachePig版本0.11.0-cdh4.4.0(rexported),编译于2013年9月3日20:25:46,并符合文档要求http://pig.apache.org/docs/r0.11.1/udf.html#python-高级“您可以在python脚本中导入python模块。pig递归地解析python依赖关系,这意味着pig将自动将所有依赖的python模块发送到后端。python模块应该在jython搜索路径中找到:jython\u home、jython\u path或current directory。所以我从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
mrwjdhj3

mrwjdhj31#

我不知道我的答案是否来得太晚,但我成功地将simplejson导入了一个udf。
我是这样做的:
我下载了simplejson并将其放入lib文件夹,然后在我的udf中执行了以下操作:

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

然后,我成功地在集群上执行了一个json.loads(),没有任何问题。
希望有帮助

相关问题