Python使用MapReduce进行简单的销售统计


Posted in Python onApril 22, 2022

MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。

Python使用MapReduce进行简单的销售统计

下面就通过手动实现MapReduce编码统计销售数量的例子来模拟。

打开Python3在线编程网址:

http://www.dooccn.com/python3/

1、生成模拟数据

#!/usr/bin/python
# -*- coding: utf-8 -*-
import random
# 模拟商品
stocks = ["HUAWEI Mate40","Apple iphone13","Apple MacBook Pro 14","ThinkBook 14p","RedmiBook Pro14","飞鹤星飞帆幼儿奶粉","爱他美 幼儿奶粉","李宁运动男卫裤","小米踏步机椭圆机","欧莱雅面膜","御泥坊面膜","欧莱雅男士套装","金六福白酒","牛栏山42度","茅台飞天"]
# 销售订单
sales_list = list()
# 生成100个买家订单,每个订单三个商品
for i in range(100):
    sstocks = list()
    for j in range(3):
        sstocks.append(stocks[random.randint(0,14)])
    a = "买家" + str(i+1) + ":" + ",".join(sstocks)
    print(a)

Python使用MapReduce进行简单的销售统计

2、mapper实现

将第一步的结果作为第二步的输入。

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
#从控制台中读取数据,循环发送每行数据
for line in sys.stdin:
    #对订单进行拆分
    orders = line.strip().split(":")
    if len(orders) == 2:
        #对订单中的商品进行拆分
        stocks = orders[1].split(",")
        for stock in stocks:
            #将每一个商品作为key,value进行输出
            print('%s,%s' % (stock,1))

Python使用MapReduce进行简单的销售统计

3、reducer实现

将第二步的结果作为第三步的输入。

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
# 创建一个空的字典用来每一个商品的销售数据
stock_dict = dict()
for line in sys.stdin:
    if len(line.strip()) >= 1:
        # 拆分每一行的商品,销量
        stock, sales = line.split(',')
        # 判断当前商品是否在字典中有存放
        if stock in stock_dict:
            # 如果有,把字典中的商品和销量取出来,追加当前销量再放入
            stock_dict[stock] = stock_dict[stock] + int(sales)
        else:
            # 如果没有,直接把商品和销量数据放入字典中
            stock_dict[stock] = int(sales)
# 遍历字典列表,获取每一个商品的销量
for stock, sales in stock_dict.items():
    print('%s\t%s' % (stock, sales))

Python使用MapReduce进行简单的销售统计 

这样就实现了简单的销售统计。

到此这篇关于Python使用MapReduce编程模型统计销量的文章就介绍到这了!


Tags in this post...

Python 相关文章推荐
Python实现视频下载功能
Mar 14 Python
使用python 写一个静态服务(实战)
Jun 28 Python
python交易记录链的实现过程详解
Jul 03 Python
Python计算一个点到所有点的欧式距离实现方法
Jul 04 Python
Python爬取破解无线网络wifi密码过程解析
Sep 17 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
Oct 28 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
Mar 09 Python
Python面向对象魔法方法和单例模块代码实例
Mar 25 Python
jupyter notebook运行命令显示[*](解决办法)
May 18 Python
用Python进行websocket接口测试
Oct 16 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
Oct 20 Python
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
Apr 05 Python
python使用pycharm安装pyqt5以及相关配置
Python使用DFA算法过滤内容敏感词
python游戏开发之pygame实现接球小游戏
Apr 22 #Python
python游戏开发Pygame框架
Apr 22 #Python
python中的random模块和相关函数详解
Apr 22 #Python
Python写情书? 10行代码展示如何把情书写在她的照片里
Apr 21 #Python
微信小程序调用python模型
Apr 21 #Python
You might like
smarty基础之拼接字符串的详解
2013/06/18 PHP
PHP APC配置文件2套和参数详解
2014/06/11 PHP
php计算两个日期时间差(返回年、月、日)
2014/06/19 PHP
PHP/HTML混写的四种方式总结
2017/02/27 PHP
php实现页面纯静态的实例代码
2017/06/21 PHP
JavaScript 中的事件教程
2007/04/05 Javascript
基于JS实现的倒计时程序实例
2015/07/24 Javascript
JS实用技巧小结(屏蔽错误、div滚动条设置、背景图片位置等)
2016/06/16 Javascript
BootstrapTable加载按钮功能实例代码详解
2017/09/22 Javascript
实时监控input框,实现输入框与下拉框联动的实例
2018/01/23 Javascript
jQuery简单判断值是否存在于数组中的方法示例
2018/04/17 jQuery
原生JS实现的碰撞检测功能示例
2018/05/18 Javascript
JavaScript对象拷贝与赋值操作实例分析
2018/12/10 Javascript
javascript验证form表单数据的案例详解
2019/03/25 Javascript
在element-ui的select下拉框加上滚动加载
2019/04/18 Javascript
如何使用JavaScript实现栈与队列
2019/06/24 Javascript
js模拟F11页面全屏显示
2019/09/17 Javascript
[05:16]《大圣!大圣》——DOTA2新英雄齐天大圣配音李世宏老师专访
2016/12/13 DOTA
[37:45]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第二场 12.09
2020/12/11 DOTA
使用Python编写简单的端口扫描器的实例分享
2015/12/18 Python
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
2018/01/17 Python
使用Python实现在Windows下安装Django
2018/10/17 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
2019/04/12 Python
Python实现制度转换(货币,温度,长度)
2019/07/14 Python
wxpython实现按钮切换界面的方法
2019/11/19 Python
Django自关联实现多级联动查询实例
2020/05/19 Python
Python利用Xpath选择器爬取京东网商品信息
2020/06/01 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
python openpyxl模块的使用详解
2021/02/25 Python
Stuart Weitzman欧盟:美国奢华鞋履品牌
2017/05/24 全球购物
描述一下JVM加载class文件的原理机制
2013/12/08 面试题
介绍一下ICMP(Internet Control Message Protocol)Internet控制信息协议
2016/11/26 面试题
职业生涯规划书基本格式
2014/01/06 职场文书
学习雷锋标语
2014/06/25 职场文书
缓刑人员思想汇报500字
2014/09/12 职场文书
晚会开幕词
2015/01/28 职场文书