新聞中心
這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
怎么進行spark的基本算子使用和源碼解析-創(chuàng)新互聯(lián)
這篇文章將為大家詳細講解有關(guān)怎么進行spark的基本算子使用和源碼解析,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
一.coalesce
1.coalesce源碼
2.coalesce解釋
是窄依賴 由多變少 shuffer默認是false,要注意
3.coalesce應(yīng)用場景
解決小文件,例如你如果開始有200個文件對應(yīng)20分區(qū),你極端情況下你過濾變長一個文件,你不能還用200個分區(qū)去裝吧 用coalesce解決,主要就是把前面的壓縮一下,但是過濾完后你要用coalesce必須實現(xiàn)做預(yù)估
4.上述的極端情況
你如果是xxx.oalesce(1),從源頭就是1,不會像mr可以設(shè)置reduce的數(shù)量
5.注意事項用coalesce 中RDD的不可變性
下圖說述的分區(qū)的大小a.partitions.size 你之前沒有用變量接收coalesce 的值,是不會變得值
6.你傳一個參數(shù)要小于默認分區(qū)才會生效
7.coalesce設(shè)置的參數(shù)大于默認的分區(qū)數(shù)不會生效,前提是一個參數(shù)
8.coalesce設(shè)置的參數(shù)大于默認的分區(qū)數(shù)生效
9.此問題對應(yīng)的源碼:
note With shuffle = true, you can actually coalesce to a larger number 一般數(shù)不需要第二個參數(shù)的
二.repartition
1.源碼:
2.底層調(diào)用的是coalesce,但是傳兩個參數(shù),允許shuffer
3.由少變多
4.repartition與coalesce區(qū)別:
就是repartition底層調(diào)用coalesce兩個參數(shù)
三.map方法使用
1.源碼
2.解釋
每個函數(shù)操作的對象是每個元素
3.注意事項
千萬不要用于操作數(shù)據(jù)庫,否則一個元素要拿個connect,太耗費資源
四.mapPartitions
1.源碼
2.解釋
每個函數(shù)作用在每個分區(qū)上,多用于操縱數(shù)據(jù)庫,一個分區(qū)一個connect
五.foreach 與 foreachPartition
1.源碼
2.解釋
一個是打印每個元素,一個是按分區(qū)打印,都是action
3.注意事項
foreachPartition多用于操作數(shù)據(jù)庫,存儲結(jié)果
五.collect
1.源碼
2.解釋與注意事項
源碼 返回數(shù)組,數(shù)組里包含所有元數(shù) 數(shù)據(jù)小用可以,因為數(shù)據(jù)都會被放到內(nèi)存里,輸出到driver端的 超過內(nèi)存會報oom
3.driver端的OOM調(diào)整一些方法
把driver 調(diào)大一些,有局限性 RDD中元素太大,抽取回driver會報OOP 不可以用collect 可以用take
4.collect注意數(shù)據(jù)量
collect collectByKey collectByValue collectAsMap 結(jié)果集出來后變成map 這些要看數(shù)據(jù)量要悠著點用,都要數(shù)據(jù)量少 廣播變量必須數(shù)據(jù)量少才可以用
六.take
1.源碼
2.解釋
面試常問take是全部掃描還是部分掃描: 部分掃描從源碼有體現(xiàn)
3.collect 與 take 注意
不確定數(shù)據(jù)有多大你可以先count一下 如果少的情況下捏可以用collect,如果太多可以用take 這些知識測試用 要全部結(jié)果你可以保存到文件系統(tǒng)上去saveas...
七.groupByKey 與 reduceByKey
1.源碼reduceByKey
2.源碼groupByKey
3.reduceByKey測試代碼
4.測試WEBUI截圖
5.groupByKey測試代碼
6.測試WEBUI截圖
7.groupByKey與reduceByKey比較
groupByKey 比reduceByKey 數(shù)據(jù)大小明顯變大,不如reduceByKey 性能好
8.groupByKey與reduceByKey shuffer截圖比較
groupByKey 所有元素都shuffer
reduceByKey 在map階段有一個聚合
關(guān)于怎么進行spark的基本算子使用和源碼解析就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
網(wǎng)站標題:怎么進行spark的基本算子使用和源碼解析-創(chuàng)新互聯(lián)
URL鏈接:http://fisionsoft.com.cn/article/hdeds.html