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更新列表的方法
Jul 28 Python
深入理解python函数递归和生成器
Jun 06 Python
Python 中 list 的各项操作技巧
Apr 13 Python
基于python requests库中的代理实例讲解
May 07 Python
python实现指定字符串补全空格、前面填充0的方法
Nov 16 Python
Python正则匹配判断手机号是否合法的方法
Dec 09 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
Aug 08 Python
Python实现决策树并且使用Graphviz可视化的例子
Aug 09 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
Jul 07 Python
python 实现有道翻译功能
Feb 26 Python
Python带你从浅入深探究Tuple(基础篇)
May 15 Python
Python tensorflow卷积神经Inception V3网络结构
May 06 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
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
2013/08/06 PHP
PHP循环函数使用介绍之PHP基础入门教程
2013/09/21 PHP
smarty内置函数{loteral}、{ldelim}和{rdelim}用法实例
2015/01/22 PHP
php简单smarty入门程序实例
2015/06/11 PHP
PHP6连接SQLServer2005的三部曲
2016/04/15 PHP
Laravel框架中缓存的使用方法分析
2019/09/06 PHP
脚本之家贴图转换+转贴工具用到的js代码超级推荐
2007/04/05 Javascript
js计算字符串长度包含的中文是utf8格式
2013/10/15 Javascript
js中的preventDefault与stopPropagation详解
2014/01/29 Javascript
ExtJS4给Combobox设置列表中的默认值示例
2014/05/02 Javascript
js实现键盘操作实现div的移动或改变的原理及代码
2014/06/23 Javascript
Javascript 普通函数和构造函数的区别
2016/11/05 Javascript
自动适应iframe右边的高度
2016/12/22 Javascript
Vue动态实现评分效果
2017/05/24 Javascript
ES6中字符串string常用的新增方法小结
2017/11/07 Javascript
Vue父子模版传值及组件传值的三种方法
2017/11/27 Javascript
详解Vue.js在页面加载时执行某个方法
2018/11/20 Javascript
「中高级前端面试」JavaScript手写代码无敌秘籍(推荐)
2019/04/08 Javascript
python实现删除文件与目录的方法
2014/11/10 Python
Python随机生成数模块random使用实例
2015/04/13 Python
使用numba对Python运算加速的方法
2018/10/15 Python
Python实现的大数据分析操作系统日志功能示例
2019/02/11 Python
python3文件复制、延迟文件复制任务的实现方法
2019/09/02 Python
python3实现网页版raspberry pi(树莓派)小车控制
2020/02/12 Python
Python request post上传文件常见要点
2020/11/20 Python
PyTorch中clone()、detach()及相关扩展详解
2020/12/09 Python
python语言time库和datetime库基本使用详解
2020/12/25 Python
5个你不知道的HTML5的接口介绍
2013/08/07 HTML / CSS
将"引用"作为函数返回值类型的格式、好处和需要遵守的规则
2016/02/09 面试题
宾馆总经理岗位职责
2014/02/14 职场文书
合作协议书模板
2014/10/10 职场文书
2015年公共机构节能宣传周活动总结
2015/03/26 职场文书
如何利用js在两个html窗口间通信
2021/04/27 Javascript
在Python中如何使用yield
2021/06/07 Python
Sleuth+logback 设置traceid 及自定义信息方式
2021/07/26 Java/Android
Win10多屏显示如何设置?Win10电脑多屏显示设置操作方法
2022/07/07 数码科技