我在为我正在使用的 piglatin 脚本创建 UDF 时遇到问题。我的问题是,当我运行脚本时pig script.pig
出现以下错误:
[main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1121: Python Error. Traceback (most recent call last):
File "utils.py", line 3, in <module>
import re
ImportError: No module named re
在我的“utils.py”脚本中,我正在像这样导入模块:import re
为什么找不到re
模块,我该如何解决?
编辑
我应该注意,如果我直接使用python
命令运行 python 脚本,我不会收到错误提示它找不到 re
模块。
编辑 2
好的,根据评论,我安装了 jython(我的系统上没有安装),这里是print sys.path
我的脚本的输出:
使用蟒蛇
['/home/hduser/bqmScripts/betsScripts', '/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages/PIL', '/usr/lib/python2.6/dist-packages/gst-0.10', '/usr/lib/pymodules/python2.6', '/usr/lib/python2.6/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.6/gtk-2.0', '/usr/local/lib/python2.6/dist-packages']
使用 Jython
['', '/usr/share/jython/Lib', '/usr/lib/site-python', '__classpath__']
使用猪
['/pig/lib/Lib', '__classpath__', '__pyclasspath__/']
看到这个后,我尝试将 jython 中缺少的路径元素添加到 pig 版本中,我现在得到的是这样的:
File "utils.py", line 8, in <module>
import re
File "/usr/share/jython/Lib/re.py", line 7, in <module>
import sre, sys
File "/usr/share/jython/Lib/sre.py", line 97, in <module>
import sre_compile
File "/usr/share/jython/Lib/sre_compile.py", line 17, in <module>
assert _sre.MAGIC == MAGIC, "SRE module mismatch"
AssertionError: SRE module mismatch
解决了
为了解决我最新的错误消息,我查找了我的 pig 安装使用的 jython 版本(2.5)并手动安装了那个版本。这解决了这个问题。