使用MapReduce查找txt文件全部最长单词 现有代码求优化实现预期输出
最长单词MapReduce实现修复方案
完整可运行reducer.py代码
"""reducer.py""" import sys results = {} for line in sys.stdin: index, value = line.strip().split('\t') # 转整数避免后续比较错误 word_len = int(index) if word_len not in results: results[word_len] = value else: results[word_len] += ' ' + value # 新增逻辑:获取最大长度及对应单词 max_length = max(results.keys()) longest_words = results[max_length] # 中文格式输出,需要英文输出可替换为你给出的预期英文句式 print(f"最长的单词长度为{max_length}个字符,对应的单词为:{longest_words}")
核心修改说明
- 原代码中读取到的长度key是字符串类型,直接比较会出现
"9" > "11"的逻辑错误,因此转换为整数类型存储 - 使用
max()方法直接获取所有单词长度的最大值 - 取出最大长度对应的单词列表后按预期格式输出
可选优化(按需使用)
如果需要排除单词附带的标点(如示例中的sorry,、?等),可以在mapper.py中对拆分后的单词做清洗,修改后的mapper代码如下:
"""mapper.py""" import sys import string for line in sys.stdin: for word in line.strip().split(): # 去除单词首尾的所有标点符号 cleaned_word = word.strip(string.punctuation) # 过滤掉空字符串(比如原内容里单独的标点) if cleaned_word: print('%s\t%s' % (len(cleaned_word), cleaned_word))
内容的提问来源于stack exchange,提问作者ANNE MARGARET
相关产品推荐
相关产品推荐

