當前位置:
首頁 > 最新 > Map和Reduce在Hadoop與Python中有何異同?

Map和Reduce在Hadoop與Python中有何異同?

Hadoop是一個大數據處理平台,也是一個集群,能夠對海量數據進行存儲和運算。MapReduce是Hadoop眾多組件當中的一個。Hadoop作為一個分散式系統,可以將不同的機器設備連接起來進行存儲,也就是人們常說的HDFS,這也是Hadoop的一個構成部分;而hadoop的另一個構成部分就是MapReduce了,前者負責數據的存儲,而後者負責數據的運算,而且可以在MapReduce上進行編程開發。

在Hadoop架構中,MapReduce可以分為兩個階段,尚學堂陳老師指出第一階段為Map階段,第二階段為Reduce階段;Map把調入文件進行切分,映射到不同節點;之後,就是Reduce發生作用,Reduce有些類似於合併同類項,對切分好的數據進行約化,既能起到匯總的效果,還可對數據起到精簡整理的作用,從而達到分散式計算的效果。

Hadoop是開源框架,所以可以通過編程用MapReduce分析數據,需要調用函數可以由用戶或開發者自由選擇。

Python中的Map和Hadoop中的Map本質是一樣的,選擇一種Python的開源框架同樣可以搭建一個簡單的分散式系統,也可以通過Map對數據文件進行切分,但過程和Hadoop中的Map是完全不一樣的,可以說是兩種不同的框架。我們在學習的時候可以進行類比來加深理解即可。

在Python當中,嚴格的講並不存在真正意義上的Reduce。Python有豐富的庫類,可調用各種函數或其他語言編寫的模塊對數據進行處理,例如做描述統計的平均數、標準差、方差,推斷統計的線性回歸、數據透視、假設檢驗等。在Python當中,這些可以稱為聚合分組運算。下面以其中的groupby為例,來進行簡要的說明。

首先來看看下面這個非常簡單的表格型數據集(以DataFrame的形式):

>>> import pandas as pd

>>> df = pd.DataFrame({"key1":["a", "a", "b", "b", "a"],

... "key2":["one", "two", "one", "two", "one"],

data1 data2 key1 key2

0 -0.410673 0.519378 a one

1 -2.120793 0.199074 a two

2 0.642216 -0.143671 b one

3 0.975133 -0.592994 b two

4 -1.017495 -0.530459 a one

假設你想要按key1進行分組,並計算data1列的平均值,我們可以訪問data1,並根據key1調用groupby:

>>> grouped = df["data1"].groupby(df["key1"])

>>> grouped

變數grouped是一個GroupBy對象,它實際上還沒有進行任何計算,只是含有一些有關分組鍵df["key1"]的中間數據而已,然後我們可以調用GroupBy的mean方法來計算分組平均值:

>>> grouped.mean()

key1

a -1.182987

b 0.808674

dtype: float64

可見,Python和Hadoop中的Reduce的不同在於Python需要根據Key進行分組,用戶根據需要調用相應函數;而Hadoop的Reduce過程要更加靈活,既可以通過編程的方法來實現,也可以直接用Hive進行SQL操作。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

C+、Python、編程題、智商題等10個方向的面試常考題型總結!大概這就是大佬吧
Python+人工智慧的超強組合,再不學就跟不上時代啦!

TAG:Python |