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

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

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

2019-11-11 04:25:38
字體:
來源:轉載
供稿:網友
關于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
国产美女搞久久| 亚洲社区在线观看| 中文字幕亚洲在线| 亚洲精品电影网在线观看| 一区二区三区视频免费在线观看| 欧美日韩国产成人在线| 国产精品女人久久久久久| 日韩久久精品电影| 成人444kkkk在线观看| 亚洲18私人小影院| 久久精品视频播放| 国产999精品久久久| 亚洲综合一区二区不卡| 一区二区三区视频在线| 国产成+人+综合+亚洲欧美丁香花| 色综合天天综合网国产成人网| 亚洲午夜av电影| 亚洲精品乱码久久久久久金桔影视| 高清欧美性猛交| 欧美日韩美女视频| 国产一区二区欧美日韩| 不卡av在线播放| 亚洲精品国产拍免费91在线| 国产精品6699| 国产丝袜一区二区三区免费视频| 精品人伦一区二区三区蜜桃免费| 欧美国产视频一区二区| 亚洲国产高清高潮精品美女| 国产精品久久久久av| 亚洲成avwww人| 久久影视三级福利片| 国产精品久久久久久久久久久久久| 亚洲视频电影图片偷拍一区| 国产精品久久久久久久7电影| 国产精品精品国产| 日本欧美在线视频| 人体精品一二三区| 日本国产一区二区三区| 国产亚洲一区二区精品| 日韩大片免费观看视频播放| 亚洲激情 国产| 亚洲一区二区中文| 中文字幕亚洲欧美日韩在线不卡| 一区二区三区黄色| 色先锋资源久久综合5566| 欧美日韩国产精品一区二区不卡中文| 国产视频在线一区二区| 久久久久久久网站| 91国产精品91| 国产精品美腿一区在线看| 久久国产一区二区三区| 国产精品成人免费视频| www.欧美视频| 亚洲视频在线看| 美女扒开尿口让男人操亚洲视频网站| 成人性生交大片免费看视频直播| 精品国产鲁一鲁一区二区张丽| 久久精品免费电影| 亚洲人成网站999久久久综合| 国内精品久久久久伊人av| 日韩精品有码在线观看| 亚洲成人黄色在线| 国产精品视频一区二区三区四| 欧美日韩一区二区免费视频| 国产成人精品在线| 欧美老女人性生活| 欧美精品videossex性护士| 国产精品久久激情| 亚洲香蕉成视频在线观看| 亲爱的老师9免费观看全集电视剧| 清纯唯美日韩制服另类| 理论片在线不卡免费观看| 亚洲图片欧洲图片av| 欧美日韩一区二区精品| 亚洲女人天堂成人av在线| 久久夜色精品国产欧美乱| 91在线视频免费| 国语自产精品视频在线看| 日韩a**中文字幕| 欧美一级成年大片在线观看| 中文字幕国产亚洲2019| 色七七影院综合| 亚洲一区二区三区sesese| 亚洲福利在线看| 国产精品久久久久久久电影| 国产午夜精品美女视频明星a级| 久久精品一区中文字幕| 国产国语刺激对白av不卡| 国产精品678| 久久艹在线视频| 亚洲福利视频在线| 日韩精品免费综合视频在线播放| 欧美日韩国产精品一区| 一区二区三区四区精品| 亚洲老板91色精品久久| 日韩在线激情视频| 色噜噜狠狠色综合网图区| 久久久免费观看视频| 成人乱人伦精品视频在线观看| 九九视频这里只有精品| 国产精品video| 欧洲亚洲在线视频| 国产精品吴梦梦| 亚洲国产一区二区三区四区| 日韩一区二区三区国产| 亚洲精品久久久久国产| 国产精品亚洲自拍| 欧美精品在线观看91| 91丨九色丨国产在线| 羞羞色国产精品| 91产国在线观看动作片喷水| 亚洲欧美中文日韩v在线观看| 91精品久久久久久久久| 91老司机在线| 亚洲午夜精品久久久久久久久久久久| 国产999精品久久久影片官网| 日韩国产精品一区| 人人澡人人澡人人看欧美| 亚洲视屏在线播放| 亚洲欧美制服丝袜| 欧美剧在线观看| 91精品国产亚洲| 久久久999国产精品| 国产亚洲免费的视频看| 久久久亚洲天堂| 亚洲第一精品夜夜躁人人爽| 日韩欧美一区二区在线| 久久精品小视频| 欧美激情videoshd| 国产精品久久久久久久久男| 国产精品夫妻激情| 国产精品视频最多的网站| 亚洲成人网久久久| 俺去了亚洲欧美日韩| 成人高清视频观看www| 97视频国产在线| 色综合久久久久久中文网| 欧美成人精品激情在线观看| 精品国产一区二区三区久久狼黑人| 国产精品999999| 日韩精品亚洲视频| 亚洲一区www| 久久免费视频观看| 国产成人精品一区二区三区| 91天堂在线视频| 91福利视频在线观看| 日韩日本欧美亚洲| 亚洲天堂视频在线观看| 亚洲精品成人久久电影| 黑人与娇小精品av专区| 国产视频一区在线| 久久九九热免费视频| 久久久91精品国产| 97视频在线观看免费| 久久久在线观看| 国产亚洲人成网站在线观看| 国产成人极品视频| 欧美极品少妇xxxxⅹ裸体艺术| 97超级碰碰碰久久久| 日韩精品在线免费播放| 国产91久久婷婷一区二区| 亚洲国产欧美精品| 精品欧美国产一区二区三区| 国产免费观看久久黄|