什么是Map、什么是Reduce
MapReduce是一個分布式編程計算模型,用於大規模數據集的分布式系統計算。
我個人理解,Map(映射、過濾)就是對一個分布式文件系統(HDFS)中的每一行(每一塊文件)執行相同的函數進行處理;
Reduce(規約、化簡)就是對Map處理好的數據進行兩兩運算,因此reduce函數必須要有兩個參數。
Map/Reduce的執行原理其實可以參考python的map/reduce函數:
Spark中的MapReduce
RDD(Resilient Distributed Dataset)叫做彈性分布式數據集,是Spark中最基本的數據抽象,它代表一個不可變、可分區、里面的元素可並行計算的集合。RDD具有數據流模型的特點:自動容錯、位置感知性調度和可伸縮性。RDD允許用戶在執行多個查詢時顯式地將工作集緩存在內存中,后續的查詢能夠重用工作集,這極大地提升了查詢速度。
RDD也支持常見的MapReduce操作。
RDD操作:
-
-
轉換操作:
每一次轉換操作都會產生不同的RDD,供給下一個“轉換”使用。轉換得到的RDD是惰性求值的,並不會發生真正的計算,只是記錄了轉換的軌跡,只有遇到行動操作時,才會發生真正的計算。
-
filter(func):篩選出滿足函數func的元素,並返回一個新的數據集
-
map(func):將每個元素傳遞到函數func中,並將結果返回為一個新的數據集
-
flatMap(func):與map()相似,但每個輸入元素都可以映射到0或多個輸出結果
-
groupByKey():應用於(K,V)鍵值對的數據集時,返回一個新的(K, Iterable)形式的數據集
-
reduceByKey(func):應用於(K,V)鍵值對的數據集時,返回一個新的(K, V)形式的數據集,其中的每個值是將每個key傳遞到函數func中進行聚合。
reduceByKey 函數應用於(Key,Value)格式的數據集。
reduceByKey 函數的作用是把 key 相同的合並。
reduceByKey 函數同樣返回一個(Key,Value)格式的數據集。
-
-
行動操作:
行動操作是真正觸發計算的地方。從文件中加載數據,完成一次又一次轉換操作
-
count() 返回數據集中的元素個數
-
collect() 以數組的形式返回數據集中的所有元素
-
first() 返回數據集中的第一個元素
-
take(n) 以數組的形式返回數據集中的前n個元素
-
reduce(func) 通過函數func(輸入兩個參數並返回一個值)聚合數據集中的元素
-
foreach(func) 將數據集中的每個元素傳遞到函數func中運行。
-
-
Spark相關API文檔
http://spark.apache.org/docs/latest/rdd-programming-guide.html