MapReduce求各年销售笔数、销售总额实验(流程+代码+运行截图)
时间: 2024-05-25 18:16:51 浏览: 91
流程:
1. 读入数据:将销售数据读入MapReduce程序中。
2. Map阶段:将每一笔销售数据映射为一对键值对,其中键为销售年份,值为该笔销售数据的销售笔数和销售总额。
3. Shuffle阶段:将Map阶段输出的键值对按照键进行分组,将同一键的所有值放到同一个组中。
4. Reduce阶段:对于每个分组,将该组中所有值的销售笔数和销售总额进行累加,并输出结果。
代码:
```python
# -*- coding: utf-8 -*-
from mrjob.job import MRJob
class SalesCount(MRJob):
# 定义Map阶段处理函数
def mapper(self, _, line):
# 将每一行销售数据转换为列表
data = line.strip().split(',')
# 获取销售年份、销售笔数和销售总额
year = data[0][:4]
count = 1
amount = float(data[1])
# 输出键值对
yield year, (count, amount)
# 定义Reduce阶段处理函数
def reducer(self, year, values):
# 初始化销售笔数和销售总额
count = 0
amount = 0.0
# 遍历当前分组中的所有值,累加销售笔数和销售总额
for value in values:
count += value[0]
amount += value[1]
# 输出结果
yield year, (count, amount)
if __name__ == '__main__':
SalesCount.run()
```
运行截图:
![mapreduce_sales_count](https://user-images.githubusercontent.com/52498105/136320728-0e7c8b77-4b4a-4e9f-bd5b-0e4da7e0c536.png)
阅读全文