我尝试使用http://blog.cloudera.com/blog/2008/11/sending-files-to-remote-task-nodes-with-hadoop-mapreduce/
zip -r nltkandyaml.zip nltk yaml
mv ntlkandyaml.zip /path/to/where/your/mapper/will/be/nltkandyaml.mod
import zipimport
importer = zipimport.zipimporter('nltkandyaml.mod')
yaml = importer.load_module('yaml')
nltk = importer.load_module('nltk')
我得到的错误是:
job_201406080403_3863 / attempt_201406080403_3863_m_000000_0 /工作/./应用程序/ mapper.py&#34 ;, 第12行,在 import nltk ImportError:没有名为nltk的模块
任何遇到过类似问题的人,请你提出详尽的解决方案。
谢谢
答案 0 :(得分:0)
我遵循了以下方法,并成功运行了nltk软件包。
注意:我只使用了nltk包而不是yaml,所以我的答案只关注加载nltk包而不是yaml,但我相信它也适用于你的问题。
假设您已在系统中安装了nltk软件包
第一
zip -r nltk.zip nltk
mv ntlk.zip /place/it/anywhere/you/like/nltk.mod
为什么哪个地方有效?
答: - 因为我们将通过命令行提供这个 .mod 压缩文件的路径,所以我们不需要担心它。
第二:
您的映射器或.py文件中的更改
#Hadoop cannot unzip files by default thus you need to unzip it
import zipimport
importer = zipimport.zipimporter('nltk.mod')
nltk = importer.load_module('nltk')
#now import what ever you like from nltk
from nltk import tree
from nltk import load_parser
from nltk.corpus import stopwords
nltk.data.path += ["."]
第三:我认为你可能遗失的最重要的一个是
命令行参数以运行map-reduce
hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar \
-file /your/path/to/mapper/mapper.py \
-mapper '/usr/local/bin/python3.4 mapper.py' \
-file /your/path/to/reducer/reducer.py \
-reducer '/usr/local/bin/python3.4 reducer.py' \
-file /your/path/to/nltkzippedmodfile/nltk.mod \
-input /your/path/to/HDFS/input/check.txt -output /your/path/to/HDFS/output/
因此,上面的步骤解决了我的问题,我认为它也应该解决其他问题 欢呼声,