Spark Core快速入門系列(8) | RDD 的持久化

      網友投稿 664 2022-05-29

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

      此篇為大家帶來的是RDD 的持久化

      目錄

      一. 代碼及結果

      二. RDD 數據的持久化

      每碰到一個 Action 就會產生一個 job, 每個 job 開始計算的時候總是從這個 job 最開始的 RDD 開始計算.

      一. 代碼及結果

      1. 代碼

      package Day04 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /** ** @author 不溫卜火 ** * @create 2020-07-26 13:57 ** * MyCSDN :https://buwenbuhuo.blog.csdn.net/ */ object CacheDemo { def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName("Practice").setMaster("local[2]") val sc = new SparkContext(conf) val rdd1 = sc.parallelize(Array("ab", "bc")) val rdd2 = rdd1.flatMap(x => { println("flatMap...") x.split("") }) val rdd3: RDD[(String, Int)] = rdd2.map(x => { (x, 1) }) rdd3.collect.foreach(println) println("-----------") rdd3.collect.foreach(println) } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      Spark Core快速入門系列(8) | RDD 的持久化

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      2. 結果

      說明:

      每調用一次 collect, 都會創建一個新的 job, 每個 job 總是從它血緣的起始開始計算. 所以, 會發現中間的這些計算過程都會重復的執行.

      原因是因為 rdd記錄了整個計算過程. 如果計算的過程中出現哪個分區的數據損壞或丟失, 則可以從頭開始計算來達到容錯的目的.

      二. RDD 數據的持久化

      每個 job 都會重新進行計算, 在有些情況下是沒有必要, 如何解決這個問題呢?

      Spark 一個重要能力就是可以持久化數據集在內存中. 當我們持久化一個 RDD 時, 每個節點都會存儲他在內存中計算的那些分區, 然后在其他的 action 中可以重用這些數據. 這個特性會讓將來的 action 計算起來更快(通常塊 10 倍). 對于迭代算法和快速交互式查詢來說, 緩存(Caching)是一個關鍵工具.

      可以使用方法persist()或者cache()來持久化一個 RDD. 在第一個 action 會計算這個 RDD, 然后把結果的存儲到他的節點的內存中. Spark 的 Cache 也是容錯: 如果 RDD 的任何一個分區的數據丟失了, Spark 會自動的重新計算.

      RDD 的各個 Partition 是相對獨立的, 因此只需要計算丟失的部分即可, 并不需要重算全部 Partition

      另外, 允許我們對持久化的 RDD 使用不同的存儲級別.

      例如: 可以存在磁盤上, 存儲在內存中(堆內存中), 跨節點做復本.

      可以給persist()來傳遞存儲級別. cache()方法是使用默認存儲級別(StorageLevel.MEMORY_ONLY)的簡寫方法.

      // rdd2.cache() // 等價于 rdd2.persist(StorageLevel.MEMORY_ONLY)

      1

      rdd2.persist(StorageLevel.MEMORY_ONLY)

      說明:

      第一個 job 會計算 RDD2, 以后的 job 就不用再計算了.

      有一點需要說明的是, 即使我們不手動設置持久化, Spark 也會自動的對一些 shuffle 操作的中間數據做持久化操作(比如: reduceByKey). 這樣做的目的是為了當一個節點 shuffle 失敗了避免重新計算整個輸入. 當時, 在實際使用的時候, 如果想重用數據, 仍然建議調用persist 或 cache

      本次的分享就到這里了,

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

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

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

      spark

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

      上一篇:《云計算與虛擬化技術叢書 深入淺出Serverless:技術原理與應用實踐》—1Serverless基礎
      下一篇:Java學習路線-32:ClassLoader類加載器反射與代理設計模式
      相關文章
      国产AV无码专区亚洲A∨毛片| 亚洲视频人成在线播放| 亚洲成av人在线视| 亚洲中文字幕无码不卡电影| 亚洲成a人无码亚洲成av无码| 亚洲 欧洲 视频 伦小说| 亚洲激情视频在线观看| 亚洲精品国产精品乱码不卡√| 亚洲午夜久久久久久久久久| 国产91精品一区二区麻豆亚洲| 无码欧精品亚洲日韩一区夜夜嗨 | 亚洲国语精品自产拍在线观看 | 亚洲av成人综合网| 亚洲天堂免费在线| 亚洲一卡一卡二新区无人区| 亚洲精品456人成在线| 亚洲中文字幕无码爆乳| 亚洲欧美日韩一区二区三区| 亚洲国产成人久久精品软件| 亚洲人成色777777精品| 亚洲av中文无码乱人伦在线观看| 亚洲精品国产suv一区88| 欧美亚洲国产SUV| 国产精品观看在线亚洲人成网| 老子影院午夜伦不卡亚洲| 伊在人亚洲香蕉精品区麻豆| 亚洲精品高清一二区久久| 精品亚洲一区二区三区在线观看| 中文字幕亚洲日韩无线码| 亚洲午夜久久久影院伊人| 久久久亚洲精品视频| 中文字幕亚洲精品资源网| 亚洲人成影院77777| 亚洲一本一道一区二区三区| 亚洲AV日韩综合一区尤物| 亚洲av无码有乱码在线观看| 亚洲国产aⅴ综合网| 亚洲级αV无码毛片久久精品| 久久亚洲春色中文字幕久久久| 亚洲啪啪免费视频| 亚洲国产欧美国产综合一区|