Python使用MapReduce编程模型统计销量

作者:SAP剑客 时间:2021-07-16 14:24:43 

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编程模型统计销量 

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

来源:https://saper.blog.csdn.net/article/details/124264457

标签:Python,MapReduce,框架
0
投稿

猜你喜欢

  • PHP获取类私有属性的3种方法

    2023-11-20 10:32:16
  • 详解Python循环作用域与闭包

    2023-01-28 20:34:30
  • Python常用库大全及简要说明

    2023-06-10 00:35:49
  • 记录Python脚本的运行日志的方法

    2022-09-25 08:11:12
  • Jsp生成页面验证码的方法[附代码]

    2023-06-25 07:46:42
  • 开发心得--写给想学Javascript朋友的一点经验之谈

    2009-02-25 11:42:00
  • CSS Sprites + 圆角[译]

    2009-05-08 16:10:00
  • python实现点对点聊天程序

    2023-10-27 11:42:02
  • Python数据可视化之分析热门话题“丁克家庭都怎么样了”

    2023-06-02 22:04:07
  • 建立合理的索引提高SQL Server的性能

    2009-01-23 14:44:00
  • Pandas分组聚合之groupby()、agg()方法的使用教程

    2021-07-07 00:29:55
  • 利用Python2下载单张图片与爬取网页图片实例代码

    2023-06-25 00:57:22
  • python实现自动更换ip的方法

    2023-06-16 21:43:06
  • 一个PHP的QRcode类与大家分享

    2023-06-24 05:39:33
  • python获取多线程及子线程的返回值

    2022-01-17 20:44:07
  • Python测试框架pytest核心库pluggy详解

    2023-11-01 23:02:08
  • javascript preload&lazy load

    2023-09-01 06:15:43
  • 黑科技 Python脚本帮你找出微信上删除你好友的人

    2021-09-04 04:07:08
  • 格式化数字ASP,PHP版

    2009-01-19 14:17:00
  • CSS Sprites

    2007-10-10 13:21:00
  • asp之家 网络编程 m.aspxhome.com