Spark快取級別

2021-09-10 14:24:19 字數 1390 閱讀 5362

spark快取級別

在spark中,如果乙個rdd或者dataset被多次復用,最好是對此做快取操作,以避免程式多次進行重複的計算。spark 的快取具有容錯機制,如果乙個快取的 rdd 的某個分割槽丟失了,spark 將按照原來的計算過程,自動重新計算並進行快取。

快取的使用:

val dataset = spark.read.parquet(file)

dataset.cache()

或者:dataset.persist()

cache() 跟 persist() 實際上是一樣的,都是memory_and_disk級別。

如果想要控制快取級別,則需要在persist()中加上你需要快取的級別,如:

dataset.persist(storagelevel.memory_only)
快取的釋放:

dataset.unpersist()

dataset.unpersist(true) //true 指定的是是否阻塞程序,直到所有block都被刪除。

注意:如果要對某個快取進行釋放,要在action操作之後,不然該快取是無效的。

快取級別:級別

使用空間

cpu時間

是否在記憶體中

是否在磁碟上

備註memory_only高低

是否memory_only_2高低

是否資料存2份

memory_only_ser_2低高

是否資料序列化,資料存2份

memory_and_disk高中等

部分部分

如果資料在記憶體中放不下,則溢寫到磁碟

memory_and_disk_2高中等

部分部分

資料存2份

memory_and_disk_ser低高

部分部分

memory_and_disk_ser_2低高

部分部分

資料存2份

disk_only低高

否是disk_only_2低高

否是資料存2份

none

off_heap

上面列表上的所有級別都是在org.apache.spark.storage.storagelevel類中

如何選擇儲存級別

spark 的儲存級別的選擇,核心問題是在記憶體使用率和 cpu 效率之間進行權衡。建議按下面的過程進行儲存級別的選擇 :

Spark快取級別

惰性求值 1.定義 在rdd行動操作之前,不觸發計算。轉換操作和建立操作 控制操作均為惰性的 只有行動操作可觸發job。快取cache 1.spark的快取級別參照 org.apache.spark.storage.storagelevel.scala new storagelevel usedis...

Spark日誌級別修改

在學習使用spark的過程中,總是想對內部執行過程作深入的了解,其中debug和trace級別的日誌可以為我們提供詳細和有用的資訊,那麼如何進行合理設定呢,不複雜但也絕不是將乙個info換為trace那麼簡單。調整spark日誌級別的配置檔案是 spark home conf log4j.prope...

spark持久化(快取)

1 惰性求值 rdd轉化過程都是惰性求值的。這意味著在被呼叫行動操作之前spark不會開始計算,spark會在內部記錄下所要求執行的操作的相關資訊,我們可以把每個rdd看作我們通過轉化操作構建出來的 記錄如何計算資料的指定列表。把資料讀取到rdd的操作同樣是惰性的。2 持久化快取 sparkrdd是...