当前位置:  开发笔记 > 编程语言 > 正文

如何在EC2上运行mapreduce作业时获取文件名?

如何解决《如何在EC2上运行mapreduce作业时获取文件名?》经验,为你挑选了1个好方法。

我正在学习弹性mapreduce,并开始使用Amazon Tutorial Section中提供的Word Splitter示例(代码如下所示).该示例为所提供的所有输入文档中的所有单词生成字数.

但是我希望通过文件名获得Word Counts的输出,即仅在一个特定文档中的单词计数.由于字数的python代码从stdin获取输入,我如何判断哪个输入行来自哪个文档?

谢谢.

#!/usr/bin/python

import sys
import re

def main(argv):
  line = sys.stdin.readline()
  pattern = re.compile("[a-zA-Z][a-zA-Z0-9]*")
  try:
    while line:
      for word in  pattern.findall(line):
        print  "LongValueSum:" + word.lower() + "\t" + "1"
      line =  sys.stdin.readline()
  except "end of file":
    return None
if __name__ == "__main__":
  main(sys.argv)

Praveen Srip.. 5

在典型的WordCount示例中,将忽略映射文件正在处理的文件名,因为作业输出包含所有输入文件的合并字数,而不是文件级.但要在文件级别获取单词计数,必须使用输入文件名.使用Python的Mapper可以使用该os.environ["map.input.file"]命令获取文件名.任务执行环境变量列表在这里.

映射器而不是仅发出键/值对,还应包含正在处理的输入文件名.以下可以是map发出的>,其中input.txt是键,是值.

现在,特定文件的所有字数都将由单个reducer处理.然后,reducer必须聚合该特定文件的字数.

像往常一样,Combiner将有助于减少映射器和减速器之间的网络抖动,并且还可以更快地完成工作.

使用MapReduce检查数据密集型文本处理,以获得更多文本处理算法.



1> Praveen Srip..:

在典型的WordCount示例中,将忽略映射文件正在处理的文件名,因为作业输出包含所有输入文件的合并字数,而不是文件级.但要在文件级别获取单词计数,必须使用输入文件名.使用Python的Mapper可以使用该os.environ["map.input.file"]命令获取文件名.任务执行环境变量列表在这里.

映射器而不是仅发出键/值对,还应包含正在处理的输入文件名.以下可以是map发出的>,其中input.txt是键,是值.

现在,特定文件的所有字数都将由单个reducer处理.然后,reducer必须聚合该特定文件的字数.

像往常一样,Combiner将有助于减少映射器和减速器之间的网络抖动,并且还可以更快地完成工作.

使用MapReduce检查数据密集型文本处理,以获得更多文本处理算法.

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有