map/reduce的雲概念非常相似,但改為并行工作。首先,每個資料對象通過一個函數傳遞給一個新對象(通常是某種字典)。然後,對map傳回的對象對調用reduce函數,直到隻剩下一個。這是map/reduce操作的結果。在
一個重要的考慮因素是,由于并行化,reduce函數必須能夠接收來自map函數的對象以及來自之前的reduce函數的對象。當您考慮并行化如何進行時,這會更有意義。許多機器将各自的資料縮減為單個對象,然後這些對象将被縮減為最終輸出。當然,如果有大量的資料,這可能會發生在多個層中。在
在下面的一個簡單的架構中,您可以使用下面的示例來減少單詞的數量:list = ['a', 'foo', 'bar', 'foobar', 'foo', 'a', 'bar', 'bar', 'bar', 'bar', 'foo']
list2 = ['b', 'foo', 'foo', 'b', 'a', 'bar']
映射函數如下所示:
^{pr2}$
reduce函數如下所示:def countReduce(d1, d2):
out = d1.copy()
for key in d2:
if key in out:
out[key] += d2[key]
else:
out[key] = d2[key]
return out
然後您可以這樣映射/減少:reduce(countReduce, map(wordToDict, list + list2))
>>> {'a': 3, 'foobar': 1, 'b': 2, 'bar': 6, 'foo': 5}
但您也可以這樣做(并行化就是這樣做的):reduce(countReduce, [reduce(countReduce, map(wordToDict, list)), reduce(countReduce, map(wordToDict, list2))])
>>> {'a': 3, 'foobar': 1, 'b': 2, 'foo': 5, 'bar': 6}