Spark Core快速入門系列(8) | RDD 的持久化
大家好,我是不溫卜火,是一名計算機學院大數據專業大二的學生,昵稱來源于成語—不溫不火,本意是希望自己性情溫和。作為一名互聯網行業的小白,博主寫博客一方面是為了記錄自己的學習過程,另一方面是總結自己所犯的錯誤希望能夠幫助到很多和自己一樣處于起步階段的萌新。但由于水平有限,博客中難免會有一些錯誤出現,有紕漏之處懇請各位大佬不吝賜教!暫時只有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
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小時內刪除侵權內容。