如何修改MapReduce的mapper与reducer代码实现查找最长单词及对应长度
MapReduce代码修改方案(从词频统计改为查找最长单词)
修改思路
原有代码逻辑为统计每个单词的出现频次,调整后逻辑如下:
- Mapper端:拆分文本得到每个单词后,直接输出单词本身和它的字符长度
- Reducer端:遍历所有Mapper输出的结果,动态记录当前最大单词长度,同时收集所有长度等于最大长度的单词,最后按指定格式输出结果
修改后的Mapper代码
import sys for line in sys.stdin: # 拆分当前行得到所有单词 for word in line.strip().split(): # 输出<单词, 单词长度>键值对,用制表符分隔 print(f"{word}\t{len(word)}")
修改后的Reducer代码
import sys # 初始化最大长度和最长单词列表 max_length = 0 longest_words = [] for line in sys.stdin: line = line.strip() if not line: continue # 拆分得到单词和对应长度 word, len_str = line.split('\t', 1) current_len = int(len_str) # 更新最大长度和最长单词列表 if current_len > max_length: max_length = current_len longest_words = [word] elif current_len == max_length: longest_words.append(word) # 按要求格式输出,如需去重可将longest_words转为set后再拼接 print(f"The longest word has {max_length} characters. The result includes: {', '.join(longest_words)}")
可选优化说明
如果需要对重复出现的最长单词去重,可将输出行的longest_words替换为list(set(longest_words))即可。
内容的提问来源于stack exchange,提问作者CKZ
相关产品推荐
相关产品推荐

