用 MapReduce 解决这个问题的思路如下:
Map 阶段:
- 对于输入的每一条记录,输出键值对,其中键为商品类型,值为商品单价 * 本月销售量
Reduce 阶段:
- 对于每一种商品类型,对其对应的所有值进行求和,并输出键值对,其中键为商品类型,值为该类型商品的本月总销售额
- 对所有输出的键值对按值进行排序,取前 10 大的输出即可得到本月销售量最高的前 10 种商品类型。
代码示例(使用 Python 语言):
``` from collections import defaultdict
def map(record): # 输入格式为 (商品名称, 商品单价, 商品类型, 本月销售量) _, price, product_type, quantity = record yield product_type, price * quantity
def reduce(product_type, values): yield product_type, sum(values)
def run_map_reduce(inputs): intermediate = defaultdict(list) for input in inputs: for key, value in map(input): intermediate[key].append(value) return [output for key, values in intermediate.items() for output in reduce(key, va