網(wǎng)站首頁 編程語言 正文
MapReduce是一種編程模型,用于大規(guī)模數(shù)據(jù)集(大于1TB)的并行運算。概念"Map(映射)"和"Reduce(歸約)",是它們的主要思想,都是從函數(shù)式編程語言里借來的,還有從矢量編程語言里借來的特性。它極大地方便了編程人員在不會分布式并行編程的情況下,將自己的程序運行在分布式系統(tǒng)上。 當前的軟件實現(xiàn)是指定一個Map(映射)函數(shù),用來把一組鍵值對映射成一組新的鍵值對,指定并發(fā)的Reduce(歸約)函數(shù),用來保證所有映射的鍵值對中的每一個共享相同的鍵組。
下面就通過手動實現(xiàn)MapReduce編碼統(tǒng)計銷售數(shù)量的例子來模擬。
打開Python3在線編程網(wǎng)址:
http://www.dooccn.com/python3/
1、生成模擬數(shù)據(jù)
#!/usr/bin/python
# -*- coding: utf-8 -*-
import random
# 模擬商品
stocks = ["HUAWEI Mate40","Apple iphone13","Apple MacBook Pro 14","ThinkBook 14p","RedmiBook Pro14","飛鶴星飛帆幼兒奶粉","愛他美 幼兒奶粉","李寧運動男衛(wèi)褲","小米踏步機橢圓機","歐萊雅面膜","御泥坊面膜","歐萊雅男士套裝","金六福白酒","牛欄山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)
2、mapper實現(xiàn)
將第一步的結(jié)果作為第二步的輸入。
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
#從控制臺中讀取數(shù)據(jù),循環(huán)發(fā)送每行數(shù)據(jù)
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))
3、reducer實現(xiàn)
將第二步的結(jié)果作為第三步的輸入。
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
# 創(chuàng)建一個空的字典用來每一個商品的銷售數(shù)據(jù)
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:
# 如果沒有,直接把商品和銷量數(shù)據(jù)放入字典中
stock_dict[stock] = int(sales)
# 遍歷字典列表,獲取每一個商品的銷量
for stock, sales in stock_dict.items():
print('%s\t%s' % (stock, sales))
?
這樣就實現(xiàn)了簡單的銷售統(tǒng)計。
原文鏈接:https://saper.blog.csdn.net/article/details/124264457
相關(guān)推薦
- 2022-11-13 Error: EACCES: permission denied, access '/usr/loc
- 2023-06-04 pandas.DataFrame中提取特定類型dtype的列_python
- 2022-04-27 關(guān)于AnacondaNavigator?Jupyter?Notebook更換Python內(nèi)核的問題_
- 2022-12-12 flutter中如何使用和擴展ThemeData實現(xiàn)詳解_Dart
- 2022-10-08 C#中LINQ的Select與SelectMany函數(shù)使用_C#教程
- 2022-10-01 使用flask如何獲取post請求參數(shù)_python
- 2022-10-02 iOS實現(xiàn)可拖動的浮動菜單_IOS
- 2023-04-17 Linux下is?not?in?the?sudoers?file的解決方案_linux shell
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支