在EC2上运行mapreduce作业时如何获取文件名?
我正在学习弹性映射缩减,并从亚马逊教程部分提供的分词器示例开始(代码如下所示)。该示例生成所提供的所有输入文档中所有单词的字数统计。
但我想按文件名获取字数统计的输出,即一个特定文档中单词的计数。由于用于字数统计的 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)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在典型的 WordCount 示例中,映射文件正在处理的文件名将被忽略,因为作业输出包含所有输入文件的合并字数统计,而不是文件级别的字数统计。但要获取文件级别的字数,必须使用输入文件名。使用 Python 的映射器可以使用 os.environ["map.input.file"] 命令获取文件名。任务执行环境变量列表位于此处。
映射器不仅仅将键/值对发出为
,还应该包含正在处理的输入文件名。以下可以是映射>
发出的内容,其中 input.txt 是键,
code> 是值。现在,特定文件的所有字数统计都将由单个缩减器处理。然后,reducer 必须聚合该特定文件的字数。
像往常一样,组合器将有助于减少映射器和减速器之间的网络干扰,并更快地完成工作。
查看使用 MapReduce 进行数据密集型文本处理,了解更多算法文本处理。
In the typical WordCount example, the file name which the map file is processing is ignored, since the the job output contains the consolidated word count for all the input files and not at a file level. But to get the word count at a file level, the input file name has to be used. Mappers using Python can get the file name using the
os.environ["map.input.file"]
command. The list of task execution environment variables is here.The mapper instead of just emitting the key/value pair as
<Hello, 1>
, should also contain the input file name being processed. The following can be the emitted by the map<input.txt, <Hello, 1>>
, where input.txt is the key and<Hello, 1>
is the value.Now, all the word counts for a particular file will be processed by a single reducer. The reducer must then aggregate the word count for that particular file.
As usual, a Combiner would help to decrease the network chatter between the mapper and the reducer and also to complete the job faster.
Check Data-Intensive Text Processing with MapReduce for more algorithms on text processing.