运行带有hadoop流的外部python库(NLTK)

时间:2014-06-11 16:23:32

标签: python hadoop nltk hadoop-streaming

我尝试使用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的模块

任何遇到过类似问题的人,请你提出详尽的解决方案。

谢谢

1 个答案:

答案 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/

因此,上面的步骤解决了我的问题,我认为它也应该解决其他问题 欢呼声,