like(nltk)

neskvpey  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(372)

我试过用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\u 201406080403\u 3863/attempt\u 201406080403\u 3863\u m\u000000\u 0/work//app/mapper.py”,第12行,导入nltk导入错误:没有名为nltk的模块
任何有过类似问题的人,请你给出一个详尽的解决方案。
谢谢

kd3sttzy

kd3sttzy1#

我遵循以下方法,在hadoop流中成功地运行了nltk包。
注意:我只使用了nltk包而不是yaml,所以我的答案将只集中在加载nltk包而不是yaml,但我相信它应该也适用于您的问题。
假设您的系统中已经安装了nltk包
第一:

zip -r nltk.zip nltk
mv ntlk.zip /place/it/anywhere/you/like/nltk.mod

为什么有人会在哪里工作?
答:因为我们将通过命令行提供这个**.mod**压缩文件的路径,所以我们不需要太担心它。
第二:
Map器或.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/

因此,上述步骤解决了我的问题,我认为它也应该解决其他人。
干杯,

相关问题