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操作。
※C+、Python、編程題、智商題等10個方向的面試常考題型總結!大概這就是大佬吧
※Python+人工智慧的超強組合,再不學就跟不上時代啦!
TAG:Python |