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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM