一、MapReduce
将这个单词分解为Map、Reduce。
-
Map阶段:在这个阶段,输入数据集被分割成小块,并由多个Map任务处理。每个Map任务将输入数据映射为一系列(key, value)对,并生成中间结果。
-
Reduce阶段:在这个阶段,中间结果被重新分组和排序,以便相同key的中间结果被传递到同一个Reduce任务。每个Reduce任务将具有相同key的中间结果合并、计算,并生成最终的输出。
举个例子,在一个很长的字符串中统计某个字符出现的次数。
from collections import defaultdict
def mapper(word):
return word, 1
def reducer(key_value_pair):
key, values = key_value_pair
return key, sum(values)
def map_reduce_function(input_list, mapper, reducer):
'''
- input_list: 字符列表
- mapper: 映射函数,将输入列表中的每个元素映射到一个键值对
- reducer: 聚合函数,将映射结果中的每个键值对聚合到一个键值对
- return: 聚合结果
'''
map_results = map(mapper, input_list)
shuffler = defaultdict(list)
for key, value in map_results:
shuffler[key].append(value)
return ma