1. 程式人生 > >Spark RDD與MapReduce

Spark RDD與MapReduce

什麼是Map、什麼是Reduce

MapReduce是一個分散式程式設計計算模型,用於大規模資料集的分散式系統計算。

我個人理解,Map(對映、過濾)就是對一個分散式檔案系統(HDFS)中的每一行(每一塊檔案)執行相同的函式進行處理;

Reduce(規約、化簡)就是對Map處理好的資料進行兩兩運算,因此reduce函式必須要有兩個引數。

Map/Reduce的執行原理其實可以參考python的map/reduce函式:

https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00141861202544241651579c69d4399a9aa135afef28c44000

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

https://www.jianshu.com/p/4f074889bbd9

https://lixh1986.iteye.com/blog/2345420