亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

跟天齊老師學Spark(7)--關于Spark的RDD

2019-11-11 05:19:37
字體:
來源:轉載
供稿:網友
關于spark的RDD:關于RDD,可以查看官方文檔,可以看作者的論文,也可以看spark源碼中關于RDD的注釋。按Ctrl+N快捷鍵,搜索RDD,進入源碼,如果沒有關聯源碼,在IDEA中右上角會有一個提示:"Attach Sources".在IDEA中關聯spark的源碼,首先解壓下載好的spark源碼包(spark-1.6.2.tgz),然后在IDEA中選擇右上角的Attach Sources,在彈出的窗口中選擇自己解壓后的spark的源碼目錄即可。RDD:一個彈性、可復原的、分布式的數據集。它是spark的一個最基本的抽象。不可變的(一旦創建好了,在計算的時候是不可變,對它進行各種操作都只能生成新的RDD),被分區的(一個分區只能屬于一臺機器,但是一臺機器上可能有很多很多的分區),的集合,它可以被并行的計算。只有key-value格式的數據才可以使用groupByKey或者join。RDD的5個特點:數據是存放在多個分區里面的。(1)RDD中有很多的分區,分區List是有序的(意味著如果你的數據很少,而分區很多,那么就可能有的分區中有數據,有的可能沒有數據);(2)一個函數會作用到每一臺機器上的每一個分區上面(split);(3)RDD和RDD之間是存在依賴關系的(為了容錯),最終的那一個RDD會觸發Action提交任務,它會向前依次推斷出前面的RDD,然后一點點計算;可復原;這些RDD之間是有序的;(4)如果你的RDD里面是key-value類型的數據,它一定會有一個Partitioner(分區器,它決定了這條數據屬于哪一個分區,它默認使用的分區器是hash分區器);如果不是key-value類型,他就沒有分區器;(在spark中沒有reduce概念,但它有一個partition概念,二者是相似的)(5)RDD里面會保存著一個最優位置。也就是數據在哪,以后它的任務就啟動在哪;把計算調度到數據所在的機器上,位置感知,實現數據本地化;寧愿移動計算,而不會移動數據;因為移動數據的代價很大,數據要消耗大量的網絡帶寬和磁盤io;(說明:如果我們是從hdfs這種分布式系統里面讀數據,它會有一個最佳位置。它會在有數據的那臺機器上創建分區,它在啟動Executor的時候,它還不知道這個數據在哪,它在創建分區的時候才會向我們的namenode進行交互,知道這個分區在哪臺機器上,然后在那臺機器上創建分區。后面看源碼的時候再介紹)--------------------------------------------------------------RDD的特點說明通過從hdfs中讀取數據來驗證RDD的一些特點首先textFile("")生成的RDD會有幾個分區呢?hdfs中的每一個block(每一個輸入切片)就會對應spark中的RDD的一個分區;通過rdd.partition.length來查看一個RDD的分區數。注意:它在分區的時候,會讓每一個分區中的數據量盡量被均勻分配。在從HDFS中讀取數據的時候,假如我們的hdfs中有兩個小文件,它會用一個RDD來讀,第一個分區是partition0,第二個分區是partition1,這樣hdfs中的文件和RDD中的分區是一一對應的,分區位于Worker中的Executor進程中。這兩個分區可能在一個Executor上,也可能在不同機器的Executor上,但是一個分區里面的數據不可能在兩臺機器上。注意textFile方法并不會觸發Action,所以現在還不會真的去讀數據,所以此時的分區中還沒有數據。但是它會記錄住每一個分區將要從哪個目錄下的哪個block中讀取數據。val rdd2 = rdd1.map((_, 1))如果沒有改變RDD分區的數量,那么新生成的子RDD中分區的數量會和父RDD的分區的數量一樣。RDD之間會記錄住它們之間的血緣關系。雖然現在還沒有出發Action,但是這些RDD會記住你調了什么方法,傳入了什么函數。rdd2.saveAsTextFile("")調動saveAsTextFile方法之后。觸發Action,開始提交任務,它會從最后一個RDD往前推知道推到最前面的rdd1,才開始讀數據,它好比從一個迭代器中讀數據,好比一個流水線,讀一條處理一條。我們調rdd上的map方法(這個rdd上的map方法是針對多臺機器的一個抽象方法),其實它最終會調每一個分區上的那個map方法(MapPartitionsRDD),然后這個分區上的map方法會調scala的map方法。在hdfs中就會產生兩個結果文件,因為它有兩個分區。打印RDD之間的依賴關系的方法:rdd.toDebugString驗證分區器:有一個getPartition方法,用key的哈希code值對分區的數量求模。val rdd3 = rdd2.repartition(2)這樣就給rdd2重新分區。rdd3.saveAsTextFile("")發現結果不一樣了。因為重新分區會有一個shuffer的過程;import org.apache.spark.HashPartitionerrdd.partitonBy(new HashPartitioner(2))rdd3.saveAsTextFile("")再看生成的結果文件中的數據,發現數據被分類了,key相同的數據在一個文件中。說明我們設置的分區器發揮作用了。調用partitonBy方法會生成一個新的RDD,叫做ShuffleRDD。它會用key的hashcode對分區數求模。這樣key相同的數據就會進入同一個分區。對每一個分區的數據進行局部求和,最后再匯總。val rdd3 = rdd2.reduceByKey(_+_)它里面也有一個默認的分區器。rdd3.saveAsTextFile("")結果文件還是兩個。說明它把key相同的數據Shuffle到同一個分區中然后再分別聚合。//在使用reduceByKey的時候,指定分區數量val rdd3 = rdd2.reduceByKey(_+_, 1)rdd3.saveAsTextFile("")此時hdfs中只有一個結果文件。因為指定了只有一個分區,所以說有的數據都被Shuffle到同一個分區中。

上面的一些實驗測試,是為了驗證RDD的一些特征。

RDD上的一些復雜的方法:將老師發的文件spark_rdd_api.txt文件中的練習一下即可。查看分區中的數據是什么:val rdd1 = sc.parallelize(List(1,2,3,4,5,6,7,8,9), 2)rdd1.mapPartitionsWithIndex(func).collect常用函數:math.max(_,_)和math.min(_, _)RDD并沒有定義reduceByKey方法,但是它能調這個方法,其實它是在PairRDDFunction中定義的。它將普通的RDD轉換成了PairRDDFunction,在RDD單例對象中就定義了一個rddToPairRDDFunction方法。在SparkContext(注意是object)中定義了很多implicit,其中就包含rddToPairRDDFunction方法,它已經被廢棄,它調用的就是RDD單例對象中定義的那個rddToPairRDDFunction方法。foreachPartition:這個方法在以后開發中用的非常非常多?。。∷梢詫⒚恳粋€分區中的數據拿出來進行處理,在Spark中計算好的數據不需要sqoop工具,定義一個函數就可以直接往關系型數據庫中寫(后面會專門有例子講)。注意coalesce(分區數, Boolean)方法和repartition方法的關系,其實repartition方法底層調的就是coalesce(分區數, shuffle=true),只不過給它傳了一個shuffle=true,表示分區中的數據一定要shuffle,也就是說數據一定要在網絡中傳遞,以數據為單位重新分配到新的RDD中。如果我們直接調用coalesce(分區數,false)方法給它傳一個false的話,就不會有shuffle。它只會以分區為單位分配給新的RDD中的分區。而分區中的數據是不會重新洗牌的。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩男女性生活视频| 日本午夜精品理论片a级appf发布| 欧美一级片久久久久久久| 亚洲美女精品成人在线视频| 国产精品香蕉av| 91超碰中文字幕久久精品| 日韩在线视频二区| 国产精品一香蕉国产线看观看| 欧美做受高潮1| 亚洲色图欧美制服丝袜另类第一页| 激情懂色av一区av二区av| 亚洲欧美国产一区二区三区| 国产一区二区三区在线视频| 亚洲香蕉成视频在线观看| 亚洲日本成人女熟在线观看| 精品欧美国产一区二区三区| 国产精品av电影| 一区二区三区视频免费在线观看| 国产精品中文字幕久久久| 亚洲福利精品在线| 91热福利电影| 国产精品久久久久aaaa九色| 免费不卡在线观看av| 亚洲白拍色综合图区| 欧美第一淫aaasss性| 97国产精品人人爽人人做| 久久影视免费观看| 国产99在线|中文| 欧美片一区二区三区| 狠狠躁18三区二区一区| 亚洲精品视频中文字幕| 亚洲色无码播放| 国产精品视频区1| 国产精品久久久久久久久久99| 国语自产精品视频在线看| 国产精品久久久久久网站| 中文字幕国产日韩| 欧美裸体xxxx极品少妇| 最新国产成人av网站网址麻豆| 欧美做受高潮电影o| 日韩免费观看av| 亚洲天堂视频在线观看| 日韩在线免费视频| 亚洲自拍高清视频网站| 亲爱的老师9免费观看全集电视剧| 欧美黄色片在线观看| 欧美又大又粗又长| 精品久久久av| 久久99久久99精品免观看粉嫩| 日韩hd视频在线观看| 九九热99久久久国产盗摄| 亚洲二区在线播放视频| 在线视频国产日韩| 国产美女久久久| 亚洲免费视频一区二区| 精品国产一区二区三区在线观看| 亚洲国产日韩欧美综合久久| 欧美日韩中文字幕日韩欧美| 97精品国产91久久久久久| 国产精品人人做人人爽| 国产91网红主播在线观看| 一区二区三区亚洲| 91理论片午午论夜理片久久| 欧美性色19p| 久久露脸国产精品| 国产亚洲精品久久久久久牛牛| 久久九九精品99国产精品| 成人在线小视频| 中文字幕一区二区三区电影| 亚洲视频在线视频| 久久久免费高清电视剧观看| 国产亚洲成av人片在线观看桃| 亚洲区中文字幕| 国产+人+亚洲| 国产精品美女在线| 日韩精品中文字幕视频在线| 成人在线中文字幕| 久久久视频精品| 国产精品久久久久久久av大片| 亚洲性线免费观看视频成熟| 欧美精品在线网站| 国产精品久久久久久久av电影| 国产成人91久久精品| 日本国产精品视频| 久久色精品视频| 亚洲精品国产欧美| 激情懂色av一区av二区av| 日本欧美精品在线| 欧洲日本亚洲国产区| 国产精品视频地址| 日韩久久午夜影院| 国产精品亚洲一区二区三区| 成人黄色中文字幕| 欧美日韩免费在线观看| 久久躁日日躁aaaaxxxx| 91成人国产在线观看| 一本色道久久88综合亚洲精品ⅰ| 亚洲精品电影网在线观看| 97在线视频免费| 亚洲人成绝费网站色www| 久久久久久成人| 国产精品日韩在线一区| 国产欧美日韩免费| 中文字幕亚洲图片| 精品电影在线观看| 色悠久久久久综合先锋影音下载| 亚洲丝袜av一区| 色噜噜狠狠狠综合曰曰曰| 亚洲一区二区黄| 久久精品在线视频| 久久久久久午夜| 国产91在线视频| 久久久久久成人| 91成人免费观看网站| 激情久久av一区av二区av三区| 亚洲另类xxxx| 国产亚洲精品一区二555| 久久亚洲精品成人| 中文字幕国产亚洲| 亚洲欧美国产精品久久久久久久| 国产精品视频1区| 国产福利视频一区二区| 色综合视频网站| 欧美在线亚洲一区| 亚洲精品之草原avav久久| 欧美日韩精品国产| 啪一啪鲁一鲁2019在线视频| 日韩在线精品视频| 久久久噜噜噜久久| 久久成人精品电影| 国产精品视频网站| 最新中文字幕亚洲| 日本精品免费一区二区三区| 91沈先生作品| 亚洲精品福利免费在线观看| 欧美日韩综合视频网址| 亚洲欧美色婷婷| 5278欧美一区二区三区| 亚洲精品电影在线| 日韩精品极品在线观看播放免费视频| 亚洲性生活视频在线观看| 日韩亚洲在线观看| 夜夜嗨av色综合久久久综合网| 亚洲一区二区三区香蕉| 91免费精品视频| 色妞在线综合亚洲欧美| 隔壁老王国产在线精品| 国产欧美一区二区三区在线| 亚洲人成在线观看网站高清| 欧美日韩国产丝袜美女| 欧美性在线视频| 日韩免费观看高清| 一区二区在线视频播放| 欧美影院成年免费版| 国产精品日韩在线一区| 欧美国产在线电影| 久久91精品国产91久久跳| 欧美色播在线播放| 国产一区二区三区在线观看网站| 日韩有码在线电影| 欧美中文字幕在线观看| 疯狂欧美牲乱大交777| 久久久久久久爱| 精品国产91久久久久久|