我正在学习弹性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检查数据密集型文本处理,以获得更多文本处理算法.
在典型的WordCount示例中,将忽略映射文件正在处理的文件名,因为作业输出包含所有输入文件的合并字数,而不是文件级.但要在文件级别获取单词计数,必须使用输入文件名.使用Python的Mapper可以使用该os.environ["map.input.file"]
命令获取文件名.任务执行环境变量列表在这里.
映射器而不是仅发出键/值对
,还应包含正在处理的输入文件名.以下可以是map发出的
,其中input.txt是键,
是值.
现在,特定文件的所有字数都将由单个reducer处理.然后,reducer必须聚合该特定文件的字数.
像往常一样,Combiner将有助于减少映射器和减速器之间的网络抖动,并且还可以更快地完成工作.
使用MapReduce检查数据密集型文本处理,以获得更多文本处理算法.