首頁  >  文章  >  後端開發  >  python實作mapreduce模式的例子

python實作mapreduce模式的例子

高洛峰
高洛峰原創
2016-11-21 14:45:071551瀏覽

MapReduce是一種從函數式程式語言借鏡的模式,在某些場景下,它可以大幅簡化程式碼。先來看看什麼是MapReduce:

MapReduce是Google提出的軟體架構,用於大規模資料集(大於1TB)的平行運算。概念“Map(映射)”和“Reduce(歸納)”,及他們的主要思想,都是從函數式程式語言借來的,還有從向量程式語言借來的特性。
目前的軟體實作是指定一個Map(映射)函數,用來把一組鍵值對映射成一組新的鍵值對,指定並發的Reduce(歸納)函數,用來確保所有映射的鍵值對中的每一個共享相同的鍵組。
簡單來說,MapReduce就是把待處理的問題分解成Map和Reduce兩個部分。而待處理的資料作為一個序列,每個序列裡的資料透過Map的函數進行運算,再透過Reduce的函數進行聚合成最終的結果。

下面使用mapreduce模式實作了一個簡單的統計日誌中單字出現次數的程式:

from functools import reduce
from multiprocessing import Pool
from collections import Counter

def read_inputs(file):
    for line in file:
        line = line.strip()
        yield line.split()

def count(file_name):
    file = open(file_name)
    lines = read_inputs(file)
    c = Counter()
    for words in lines:
        for word in words:
            c[word] += 1
    return c

def do_task():
    job_list = ['log.txt'] * 10000
    pool = Pool(8)
    return reduce(lambda x, y: x+y, pool.map(count, job_list))

if __name__ == "__main__":
    rv = do_task()


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn