我见过一种技术(在stackoverflow上),用于使用zip文件执行hadoop流作业来存储引用的python模块。
我在作业执行的映射阶段遇到了一些错误。我很确定它与zip'd模块加载有关。
要调试脚本,我已经使用命令行管道将我的数据集通过sys.stdin / sys.stdout运行到我的mapper和reducer中,如下所示:
head inputdatafile.txt | ./mapper.py | sort -k1,1 | ./reducer.py
结果看起来很棒。
当我通过hadoop运行时,我开始遇到一些问题。即:映射器和reducer失败,整个hadoop作业完全失败。
我的zip'd模块文件包含* .pyc文件 - 是否会对此产生影响?
在哪里可以找到使用hadoop流式传输的地图/缩小过程中产生的错误?
我已经使用-file命令行参数来告诉hadoop zip'd模块所在的位置以及我的mapper和reducer脚本所在的位置。
我没有做任何疯狂的配置选项来增加工作中使用的映射器和缩减器的数量。
任何帮助将不胜感激!谢谢!
答案 0 :(得分:0)
在查看sent_tokenize的源代码之后,看起来nltk.sent_tokenize和nltk.tokenize.sent_tokenize方法/函数依赖于pickle文件(用于执行punkt标记化)来操作。
由于这是Hadoop-streaming,你必须弄清楚在哪里/如何将该pickle文件放入添加到hadoop作业jar中的zip'd代码模块中。
底线?我建议使用RegexpTokenizer类进行句子和单词级别标记化。