日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spark将rdd转为string_大数据技术之SparkCore(三)RDD依赖关系

發布時間:2025/3/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spark将rdd转为string_大数据技术之SparkCore(三)RDD依赖关系 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2.6.1 Lineage

RDD只支持粗粒度轉換,即在大量記錄上執行的單個操作。將創建RDD的一系列Lineage(血統)記錄下來,以便恢復丟失的分區。RDD的Lineage會記錄RDD的元數據信息和轉換行為,當該RDD的部分分區數據丟失時,它可以根據這些信息來重新運算和恢復丟失的數據分區。

(1)讀取一個HDFS文件并將其中內容映射成一個個元組

scala> val wordAndOne = sc.textFile("/fruit.tsv").flatMap(_.split("")).map((_,1))

wordAndOne: org.apache.spark.rdd.RDD[(String, Int)] = MapPartitionsRDD[22] at map at :24

(2)統計每一種key對應的個數

scala> val wordAndCount = wordAndOne.reduceByKey(_+_)

wordAndCount: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[23] at reduceByKey at :26

(3)查看“wordAndOne”的Lineage。通過toDebugString函數:會發現從下往上,依次經歷了HadoopRDD—MapPartitionsRDD—flatMap—map幾個過程

scala> wordAndOne.toDebugString

res5: String =

(2) MapPartitionsRDD[22] at map at :24 []

| MapPartitionsRDD[21] at flatMap at :24 []

| /fruit.tsv MapPartitionsRDD[20] at textFile at :24 []

| /fruit.tsv HadoopRDD[19] at textFile at :24 []

(4)查看“wordAndCount”的Lineage。在上面基礎上又經歷了reduceByKey,且已顯明是一個ShuffledRDD

scala> wordAndCount.toDebugString

res6: String =

(2) ShuffledRDD[23] at reduceByKey at :26 []

+-(2) MapPartitionsRDD[22] at map at :24 []

| MapPartitionsRDD[21] at flatMap at :24 []

| /fruit.tsv MapPartitionsRDD[20] at textFile at :24 []

| /fruit.tsv HadoopRDD[19] at textFile at :24 []

(5)查看“wordAndOne”的依賴類型。通過dependencies函數,顯示出是OneToOneDependency,即窄依賴:

scala> wordAndOne.dependencies

res7: Seq[org.apache.spark.Dependency[_]] = List(org.apache.spark.OneToOneDependency@5d5db92b)

(6)查看“wordAndCount”的依賴類型。通過dependencies函數,顯示出是ShuffleDependency,即寬依賴:

scala> wordAndCount.dependencies

res8: Seq[org.apache.spark.Dependency[_]] = List(org.apache.spark.ShuffleDependency@63f3e6a8)

注意:RDD和它依賴的父RDD(s)的關系有兩種不同的類型,即窄依賴(narrow dependency)和寬依賴(wide dependency)。

2.6.2 窄依賴

窄依賴指的是每一個父RDD的Partition最多被子RDD的一個Partition使用,窄依賴我們形象的比喻為獨生子女(父RDD的一個分區只被一個子RDD使用)

2.6.3 寬依賴

寬依賴指的是多個子RDD的Partition會依賴同一個父RDD的Partition,會引起shuffle,總結:寬依賴我們形象的比喻為超生(父RDD的各個分區都被子RDD使用)

2.6.4 DAG

DAG(Directed Acyclic Graph)叫做有向無環圖,原始的RDD通過一系列的轉換就就形成了DAG,根據RDD之間的依賴關系的不同將DAG劃分成不同的Stage,對于窄依賴,partition的轉換處理在Stage中完成計算。對于寬依賴,由于有Shuffle的存在,只能在parent RDD處理完成后,才能開始接下來的計算,因此寬依賴是劃分Stage的依據

2.6.5 任務劃分(面試重點)

RDD任務切分中間分為:Application、Job、Stage和Task

1)Application:初始化一個SparkContext即生成一個Application

2)Job:一個Action算子就會生成一個Job

3)Stage:根據RDD之間的依賴關系的不同將Job劃分成不同的Stage,遇到一個寬依賴則劃分一個Stage。

4)Task:Stage是一個TaskSet,將Stage劃分的結果發送到不同的Executor執行即為一個Task。(Stage中有多個分區,一個分區就是一個任務,即taskSet,這些tasks又會被分配到不同Executor中取執行)

注意:Application->Job->Stage-> Task每一層都是1對n的關系。

(本文為系列文章,關注作者閱讀其它部分內容,總有一篇是你欠缺的,技術無止境,且學且珍惜!!!)

總結

以上是生活随笔為你收集整理的spark将rdd转为string_大数据技术之SparkCore(三)RDD依赖关系的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。