对于我的一个项目,我基本上使用nltk进行词性标记,它在内部使用一个'english.pickle'文件。我成功地用这些pickle文件打包了nltk库,以便mapper和reducer使用-file选项为hadoop流作业提供这些文件。
但是,当nltk库试图加载该pickle文件时,它会为numpy提供错误信息—因为我正在运行此作业的集群没有安装numpy。另外,我没有根访问权限,因此无法在集群上安装numpy或任何其他包。因此,唯一的方法是打包python模块,使其可用于mapper和reducer。我成功地做到了。但现在的问题是,当导入numpy时,默认情况下它会导入multiarray(如init.py中所示),这就是我得到错误的地方:
File "/usr/lib64/python2.6/pickle.py", line 1370, in load
return Unpickler(file).load()
File "/usr/lib64/python2.6/pickle.py", line 858, in load
dispatch[key](self)
File "/usr/lib64/python2.6/pickle.py", line 1090, in load_global
klass = self.find_class(module, name)
File "/usr/lib64/python2.6/pickle.py", line 1124, in find_class
__import__(module)
File "numpy.mod/numpy/__init__.py", line 170, in <module>
File "numpy.mod/numpy/add_newdocs.py", line 13, in <module>
File "numpy.mod/numpy/lib/__init__.py", line 8, in <module>
File "numpy.mod/numpy/lib/type_check.py", line 11, in <module>
File "numpy.mod/numpy/core/__init__.py", line 6, in <module>
ImportError: cannot import name multiarray
我尝试将本地计算机上包含multiarray.pyd的numpy目录移动到集群中,以使其可供mapper和reducer使用,但没有起到任何作用。
关于如何解决这个问题(保留不能在集群机器上安装任何东西的限制)有什么意见吗?谢谢!
暂无答案!
目前还没有任何答案,快来回答吧!