首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Hadoop流作业中包含python包?

如何在Hadoop流作业中包含python包?
EN

Stack Overflow用户
提问于 2011-07-25 11:33:59
回答 3查看 12.7K关注 0票数 18

我正在尝试在Hadoop流作业中包含一个python包(NLTK),但是我不确定如何在不通过CLI参数"-file“手动包含每个文件的情况下做到这一点。

编辑:一种解决方案是在所有的slaves上安装这个包,但我目前没有这个选项。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-25 12:26:11

我会将包压缩到.tar.gz.zip中,并在-file选项中将整个tarball或归档文件传递给hadoop命令。我以前用Perl做过这件事,但没有用Python。

也就是说,如果您在http://docs.python.org/library/zipimport.html上使用Python的zipimport,我认为这仍然适用于您,它允许您直接从压缩包导入模块。

票数 7
EN

Stack Overflow用户

发布于 2011-07-25 12:26:26

刚刚发现了一个非常棒的解决方案:http://blog.cloudera.com/blog/2008/11/sending-files-to-remote-task-nodes-with-hadoop-mapreduce/

首先使用所需的库创建zip

代码语言:javascript
复制
zip -r nltkandyaml.zip nltk yaml
mv ntlkandyaml.zip /path/to/where/your/mapper/will/be/nltkandyaml.mod

接下来,通过Hadoop stream包含"-file“参数:

代码语言:javascript
复制
hadoop -file nltkandyaml.zip

最后,通过python加载库:

代码语言:javascript
复制
import zipimport
importer = zipimport.zipimporter('nltkandyaml.mod')
yaml = importer.load_module('yaml')
nltk = importer.load_module('nltk') 

此外,此页面还总结了如何包含语料库:http://www.xcombinator.com/2009/11/18/how-to-use-cascading-with-hadoop-streaming/

下载并解压缩wordnet语料库

代码语言:javascript
复制
cd wordnet
zip -r ../wordnet-flat.zip *

在python中:

代码语言:javascript
复制
wn = WordNetCorpusReader(nltk.data.find('lib/wordnet-flat.zip'))
票数 29
EN

Stack Overflow用户

发布于 2014-10-23 12:41:29

您可以像这样使用zip lib:

代码语言:javascript
复制
import sys
sys.path.insert(0, 'nltkandyaml.mod')
import ntlk
import yaml
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6811549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档