Spark Core快速入門系列(1) | 什么是RDD?一文帶你快速了解Spark中RDD的概念!

      網友投稿 967 2025-04-02

      大家好,我是不溫卜火,是一名計算機學院大數據專業大二的學生,昵稱來源于成語—不溫不火,本意是希望自己性情溫和。作為一名互聯網行業的小白,博主寫博客一方面是為了記錄自己的學習過程,另一方面是總結自己所犯的錯誤希望能夠幫助到很多和自己一樣處于起步階段的萌新。但由于水平有限,博客中難免會有一些錯誤出現,有紕漏之處懇請各位大佬不吝賜教!暫時只有csdn這一個平臺,博客主頁:https://buwenbuhuo.blog.csdn.net/


      此篇為大家帶來的是什么是RDD?一文帶你快速了解Spark中RDD的概念!

      目錄

      一. 什么是RDD

      二. RDD 的 5 個主要屬性(property)

      三. 理解RDD

      RDD特點

      1. 彈性

      2. 分區

      3. 只讀

      4. 依賴(血緣)

      5. 緩存

      Spark Core快速入門系列(1) | 什么是RDD?一文帶你快速了解Spark中RDD的概念!

      6. checkpoint

      看了前面的幾篇Spark博客,相信大家對于Spark的基本概念以及不同模式下的環境部署問題已經搞明白了。但其中,我們曾提到過Spark程序的核心,也就是彈性分布式數據集(RDD)。但到底什么是RDD,它是做什么用的呢?本篇博客,我們就來詳細討論它們的使用情況。

      一. 什么是RDD

      RDD(Resilient Distributed Dataset)叫做彈性分布式數據集,是Spark中最基本的數據抽象。

      在代碼中是一個抽象類,它代表一個彈性的、不可變、可分區、里面的元素可并行計算的集合。

      二. RDD 的 5 個主要屬性(property)

      1一組分區(Partition),即數據集的基本組成單位;

      2一個計算每個分區的函數;

      3 RDD之間的依賴關系;

      4 一個Partitioner,即RDD的分片函數;

      5 一個列表,存儲存取每個Partition的優先位置(preferred location)。

      1. A list of partitions

      多個分區. 分區可以看成是數據集的基本組成單位.

      對于 RDD 來說, 每個分區都會被一個計算任務處理, 并決定了并行計算的粒度.

      用戶可以在創建 RDD 時指定 RDD 的分區數, 如果沒有指定, 那么就會采用默認值. 默認值就是程序所分配到的 CPU Coure 的數目.

      每個分配的存儲是由BlockManager 實現的. 每個分區都會被邏輯映射成 BlockManager 的一個 Block, 而這個 Block 會被一個 Task 負責計算.

      2. A function for computing each split

      計算每個切片(分區)的函數.

      Spark 中 RDD 的計算是以分片為單位的, 每個 RDD 都會實現 compute 函數以達到這個目的.

      3. A list of dependencies on other RDDs

      與其他 RDD 之間的依賴關系

      RDD 的每次轉換都會生成一個新的 RDD, 所以 RDD 之間會形成類似于流水線一樣的前后依賴關系. 在部分分區數據丟失時, Spark 可以通過這個依賴關系重新計算丟失的分區數據, 而不是對 RDD 的所有分區進行重新計算.

      4. Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)

      對存儲鍵值對的 RDD, 還有一個可選的分區器.

      只有對于 key-value的 RDD, 才會有 Partitioner, 非key-value的 RDD 的 Partitioner 的值是 None. Partitiner 不但決定了 RDD 的本區數量, 也決定了 parent RDD Shuffle 輸出時的分區數量.

      5. Optionally, a list of preferred locations to compute each split on(e.g. block locations for an HDFS file)

      存儲每個切片優先(preferred location)位置的列表. 比如對于一個 HDFS 文件來說, 這個列表保存的就是每個 Partition 所在文件塊的位置. 按照“移動數據不如移動計算”的理念, Spark 在進行任務調度的時候, 會盡可能地將計算任務分配到其所要處理數據塊的存儲位置.

      三. 理解RDD

      一個 RDD 可以簡單的理解為一個分布式的元素集合.

      RDD 表示只讀的分區的數據集,對 RDD 進行改動,只能通過 RDD 的轉換操作, 然后得到新的 RDD, 并不會對原 RDD 有任何的影響

      在 Spark 中, 所有的工作要么是創建 RDD, 要么是轉換已經存在 RDD 成為新的 RDD, 要么在 RDD 上去執行一些操作來得到一些計算結果.

      每個 RDD 被切分成多個分區(partition), 每個分區可能會在集群中不同的節點上進行計算.

      RDD特點

      1. 彈性

      存儲的彈性:內存與磁盤的自動切換;

      容錯的彈性:數據丟失可以自動恢復;

      計算的彈性:計算出錯重試機制;

      分片的彈性:可根據需要重新分片。

      2. 分區

      RDD 邏輯上是分區的,每個分區的數據是抽象存在的,計算的時候會通過一個compute函數得到每個分區的數據。

      如果 RDD 是通過已有的文件系統構建,則compute函數是讀取指定文件系統中的數據,如果 RDD 是通過其他 RDD 轉換而來,則 compute函數是執行轉換邏輯將其他 RDD 的數據進行轉換。

      3. 只讀

      RDD 是只讀的,要想改變 RDD 中的數據,只能在現有 RDD 基礎上創建新的 RDD。

      由一個 RDD 轉換到另一個 RDD,可以通過豐富的轉換算子實現,不再像 MapReduce 那樣只能寫map和reduce了。

      RDD 的操作算子包括兩類,

      RDD的操作算子包括兩類,一類叫做transformations,它是用來將RDD進行轉化,構建RDD的血緣關系;另一類叫做actions,它是用來觸發RDD的計算,得到RDD的相關計算結果或者將RDD保存的文件系統中。下圖是RDD所支持的操作算子列表。

      4. 依賴(血緣)

      RDDs 通過操作算子進行轉換,轉換得到的新 RDD 包含了從其他 RDDs 衍生所必需的信息,RDDs 之間維護著這種血緣關系,也稱之為依賴。

      如下圖所示,依賴包括兩種,

      一種是窄依賴,RDDs 之間分區是一一對應的,

      另一種是寬依賴,下游 RDD 的每個分區與上游 RDD(也稱之為父RDD)的每個分區都有關,是多對多的關系。

      5. 緩存

      如果在應用程序中多次使用同一個 RDD,可以將該 RDD 緩存起來,該 RDD 只有在第一次計算的時候會根據血緣關系得到分區的數據,在后續其他地方用到該 RDD 的時候,會直接從緩存處取而不用再根據血緣關系計算,這樣就加速后期的重用。

      如下圖所示,RDD-1 經過一系列的轉換后得到 RDD-n 并保存到 hdfs,RDD-1 在這一過程中會有個中間結果,如果將其緩存到內存,那么在隨后的 RDD-1 轉換到 RDD-m 這一過程中,就不會計算其之前的 RDD-0 了。

      6. checkpoint

      雖然 RDD 的血緣關系天然地可以實現容錯,當 RDD 的某個分區數據計算失敗或丟失,可以通過血緣關系重建。

      但是對于長時間迭代型應用來說,隨著迭代的進行,RDDs 之間的血緣關系會越來越長,一旦在后續迭代過程中出錯,則需要通過非常長的血緣關系去重建,勢必影響性能。

      為此,RDD 支持checkpoint 將數據保存到持久化的存儲中,這樣就可以切斷之前的血緣關系,因為checkpoint 后的 RDD 不需要知道它的父 RDDs 了,它可以從 checkpoint 處拿到數據。

      本次的分享就到這里了,

      好書不厭讀百回,熟讀課思子自知。而我想要成為全場最靚的仔,就必須堅持通過學習來獲取更多知識,用知識改變命運,用博客見證成長,用行動證明我在努力。

      如果我的博客對你有幫助、如果你喜歡我的博客內容,請“” “評論”“”一鍵三連哦!聽說的人運氣不會太差,每一天都會元氣滿滿呦!如果實在要白嫖的話,那祝你開心每一天,歡迎常來我博客看看。

      碼字不易,大家的支持就是我堅持下去的動力。后不要忘了關注我哦!

      spark 分布式

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Excel 3個簡單技巧輕松避免格式不規范數據出錯(excel表格)
      下一篇:兩表格查重(兩列表格查重)
      相關文章
      99久久亚洲综合精品成人网| 亚洲综合最新无码专区| 亚洲精品无码永久在线观看你懂的| 亚洲第一区二区快射影院| 亚洲高清视频免费| 麻豆亚洲AV永久无码精品久久| 亚洲人成网亚洲欧洲无码久久| 国产亚洲精品久久久久秋霞| 亚洲线精品一区二区三区| 亚洲香蕉网久久综合影视| 亚洲精品国精品久久99热一| 亚洲午夜国产精品无码| 亚洲免费视频一区二区三区| 亚洲精品国产自在久久| heyzo亚洲精品日韩| 亚洲av日韩精品久久久久久a| 亚洲色大网站WWW永久网站| 在线亚洲午夜片AV大片| 亚洲久热无码av中文字幕| 在线观看亚洲AV日韩A∨| 一区二区亚洲精品精华液| 亚洲一区二区三区在线观看网站| 亚洲成a人片在线不卡| 亚洲a∨无码男人的天堂| 亚洲伊人久久大香线蕉结合| 国产午夜亚洲精品国产| 亚洲日韩国产AV无码无码精品| 亚洲午夜精品一区二区麻豆| 亚洲爆乳少妇无码激情| 最新亚洲人成无码网站| 亚洲精品无码久久久久牙蜜区| 亚洲日产乱码一二三区别| 国产精品亚洲lv粉色| 亚洲区小说区图片区| 国产成人亚洲精品91专区手机| 亚洲日本乱码在线观看| 亚洲狠狠综合久久| 亚洲成a人片77777群色| 亚洲熟妇AV日韩熟妇在线| 无码专区一va亚洲v专区在线| 亚洲午夜爱爱香蕉片|