gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:17:04 25 4
gpt4 key购买 nike

我正在学习 elastic mapreduce,并从 Amazon 教程部分中提供的 Word Splitter 示例开始(代码如下所示)。该示例为提供的所有输入文档中的所有单词生成单词计数。

但我想通过文件名获取字数统计的输出,即仅在一个特定文档中的字数。由于字数统计的 Python 代码从标准输入中获取输入,我如何判断哪一行输入来自哪个文档?

谢谢。

#!/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)

最佳答案

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

映射器不只是将键/值对作为 <Hello, 1> 发出, 还应该包含正在处理的输入文件名。以下是 map 发出的<input.txt, <Hello, 1>> ,其中 input.txt 是键,<Hello, 1>是值(value)。

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

像往常一样,Combiner 有助于减少 mapper 和 reducer 之间的网络干扰,并更快地完成工作。

检查 Data-Intensive Text Processing with MapReduce有关文本处理的更多算法。

关于python - 在 EC2 上运行 mapreduce 作业时如何获取文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8074730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com