首頁 > 軟體

Python使用MapReduce程式設計模型統計銷量

2022-04-22 10:00:14

MapReduce是一種程式設計模型,用於大規模資料集(大於1TB)的並行運算。概念"Map(對映)"和"Reduce(歸約)",是它們的主要思想,都是從函數語言程式設計語言裡借來的,還有從向量程式語言裡借來的特性。它極大地方便了程式設計人員在不會分散式並行程式設計的情況下,將自己的程式執行在分散式系統上。 當前的軟體實現是指定一個Map(對映)函數,用來把一組鍵值對對映成一組新的鍵值對,指定並行的Reduce(歸約)函數,用來保證所有對映的鍵值對中的每一個共用相同的鍵組。

下面就通過手動實現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)

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))

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('%st%s' % (stock, sales))

 

這樣就實現了簡單的銷售統計。

到此這篇關於Python使用MapReduce程式設計模型統計銷量的文章就介紹到這了,更多相關Python MapReduce內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com