您好,登錄后才能下訂單哦!
這篇文章主要介紹“spark創(chuàng)建RDD的方式有哪些”,在日常操作中,相信很多人在spark創(chuàng)建RDD的方式有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”spark創(chuàng)建RDD的方式有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
##產生的技術環(huán)境
避免在多種運算場景,多種集群部署
集群計算數(shù)據(jù),典型的思想mr,后來最重要的是hadoop,分布式集群,會把編程簡化為位置感知、容錯、負載均衡,在集群上操作超大數(shù)據(jù),這種模式是數(shù)據(jù)流的方式;hdfs->計算->hdfs tez dag 基于數(shù)據(jù)流的dag雖然實現(xiàn)任務調度和故障恢復,但是每次操作讀寫磁盤,如果同樣一次操作,如果第二次操作,完全會計算一次,比如圖計算,機器學習,比如交互式查詢
##解決問題的方式
解決上述的問題是RDD
檢查點或者回滾機制vs共享內存模型
#創(chuàng)建RDD的三種方式
通過已存在的scala集合
通過hdfs、hbase等
通過其他rdd的轉換
#Spark RDD中Transformation的Lazy特性
textfile產生hadoopRDD和mappartitionRDD
#Spark RDD中Runtime流程解析
RDD是邏輯結構,數(shù)據(jù)本身是block manager
#Spark RDD中Transformation的算子詳解
map:針對每個分區(qū)中的元素進行改變,分區(qū)個數(shù)不行 v1->v`1,map是根據(jù)stage中進行復合操作時執(zhí)行的
flatmap:將各個分區(qū)中的數(shù),進行轉化,匯聚成一個分區(qū)
mapPartitions:Iter=>iter.filter(_>3)針對某個分區(qū),分區(qū)數(shù)不變
glom:將每個分區(qū)形成一個數(shù)組,分區(qū)數(shù)不變
filter:根據(jù)傳入的函數(shù)的返回值,如果為true,就返回否則忽略,分區(qū)數(shù)不變
distinct:針對每個分區(qū)內重復的元素過濾,分區(qū)數(shù)不變
cartesian:針對多個RDD的分區(qū)進行笛卡爾積
union:針對多個RDD分區(qū)進行合并(不進行去重),會改變分區(qū)數(shù)
mapValues:針對分區(qū)中kv結構的RDD中的v進行操作,對k不會有影響,分區(qū)數(shù)不變
subtract:去除多個分區(qū)中交叉的元素
sample:針對RDD采樣fraction=0.5,seed=9,返回結果仍是RDD
takeSample:num=1,seed=9,返回結果不是RDD groupBy:根據(jù)k,group,相同k擁有v數(shù)組 partitionBy:針對RDD分區(qū) cogroup:這對kvRDD,的k進行分組,每個k是v的元組數(shù)組 combineByKey:groupbykey,針對分區(qū)進行分組,分區(qū)數(shù)不變 reduceByKey:對每個分區(qū)相同k的v進行操作
join:
leftOuterJoin:
rightOuterJoin:
#Spark RDD中cache和persist詳解
cache是persist的一種實現(xiàn),都是lazy操作,unpersist是立即操作
#RDD中Action的算子詳解
foreach:
collect:toArray
collectAsMap:kv模式的hashmap,k重復v會覆蓋
reduceByKeyLocally:reduce+collectAsMap:kv lookup:尋找指定k的sequence序列,優(yōu)先找partition,否則暴力掃描
count:計算所有分區(qū)中元素的個數(shù)
top:
reduce:對每個分區(qū)分別進行reduceLeft,在對所有分區(qū)結果進行reduceLeft
fold:比reduce默認一個zero
aggregate:
saveAsTextFile:
saveAsObjectFile:c<null,byteWriteable> sequence
#RDD中的緩存和檢查點不同使用場景和工作機制徹底解析
##緩存(persist)
緩存會被重用eg:1 2 3 4 [5] 6.1 6.2 6.3
[5]有10000分片,可能丟失
##檢查點(checkpoint) 在什么地方緩存,在獲取大量數(shù)據(jù)的時候,上下stage,很長的計算鏈條之后,超耗時計算,checkpoint
checkpoint:會改變rdd的血緣關系,在action后觸發(fā),引入checkpoint,避免緩存丟失,重新計算帶來的性能方面的開銷,checkpoint,在action觸發(fā)之后產生一個新的job,使用checkpoint的rdd務必使用checkpoint,這樣更快,流計算,圖計算使用很多checkpoint
#RDD窄依賴NarrowDependency和寬依賴ShuffleDependency
1個窄依賴:1個計算任務,相互獨立
源碼 Dependency
窄依賴可以優(yōu)化scheduler optimizations
寬依賴是劃分stage的依據(jù),stage是構成dag的大粒度
#兩種類型Spark RDD Task解析以及iterator解析
最后一個stage的task是resultTask,前面依賴的stage的task稱為shuffleMapTask,都共有一個runTask方法的iterator開始計算
shuffleMapTask->bucket
判斷是否有緩存
判斷是否有checkpoint
sparkEnv
#RDD的iterator中的緩存處理內幕源碼級詳解
#Spark RDD的checkpoint處理內幕源碼級詳解
#Spark RDD容錯原理及其四大核心要點解析
#Spark應用程序中核心概念和常用術語詳解
一個application可以有若干個作業(yè)
#Spark應用程序作業(yè)調度流程和底層運行機制內幕概述
#Spark應用程序運行Cluster和Client兩種模式詳解
cluster是在集群的某個worker中,client是在本地
所有的schedule都會被driver中的schedulebackend管理
excutor內部是多線程并行執(zhí)行
#DAGScheduler、TaskScheduler、SchedulerBackend解析
到此,關于“spark創(chuàng)建RDD的方式有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。