sparkRDD的持久化問題

2021-09-01 04:45:02 字數 1290 閱讀 8407

spark的rdd與其他dataset都可以做持久化,關於持久化的等級也可根據自身需求選擇關於持久化等級可檢視官網

這裡記錄一次關於持久化的直觀感受;

在專案中需要對一批資料做三次校驗,1.通用校驗,2.欄位名稱合法性校驗,3.欄位值得型別校驗。由於需要對通過每一次校驗的結果做統計來寫報告所以偽**如下:

val rdd1 = rdd.filter(通用校驗)

//統計數量

county1 = rdd1.count()

val rdd2 = rdd1.filter(名稱合法性校驗)

//統計合法數量

county2 = rdd2.count()

val rdd3 = rdd2.filter(型別校驗)

//統計型別校驗通過的數量

county3 = rdd3.count()

//每種校驗都列印當前校驗的名稱

當測試**的時候發現:當開始最後一步型別校驗的時候會把前兩種校驗也給列印出來,這說明在最後一步校驗時使用的額rdd2是通過有最初的rdd重新計算得到的,這就很可怕了,我不能為了你個統計數字重複這麼大量的工作啊。所以想到了持久化的問題將**做如下處理:

val rdd1 = rdd.filter(通用校驗)

//統計數量

county1 = rdd1.count()

val rdd2 = rdd1.filter(名稱合法性校驗)

//統計合法數量

county2 = rdd2.count()

//*****************************持久化********************************//

rdd2.persist(storagelevel.memory_only)

val rdd3 = rdd2.filter(型別校驗)

//統計型別校驗通過的數量

county3 = rdd3.count()

//每種校驗都列印當前校驗的名稱

然後再觀察日誌就會看到最後一步只列印value型別校驗的日誌。但是這種方法有乙個問題就是持久化需要記憶體或者磁碟,前者效能較好,但是安全性和資源占用比較嚴重,後者磁碟io嚴重,當然這不在今天的討論範圍之內,針對我的這個需求有更好的解決方案。

Spark RDD 2 持久化 容錯機制

rdd.cache 預設呼叫persisi,之快取記憶體 def cache this.type persist rdd.persist def persist this.type persist storagelevel.memory only rdd.unpersist true 手動釋放快取r...

AMQ的持久化問題

前言 前面一篇amq專題中,我們發現對於topic這種型別的訊息,即使將deliverymode設定為持久化,只要生產者在消費者之前啟動。訊息生產者發布的訊息還是會丟失。這是符合jms規範的。當然,作為乙個如此活躍的開源訊息中介軟體,在實現jms基本規範之後,必然會通過擴充套件的方式來實現topic...

quartz 持久化失效問題

今天在開發乙個功能的時候,需要用到定時器在某個時間段進行定時執行,專案裡面原來就配置有跟定時器相關的配置了,大致如下,配置今天在開發乙個功能的時候,需要用到定時器在某個時間段進行定時執行,專案裡面原來就配置有跟定時器相關的配置了,大致如下,配置了乙個 定時器工廠類 然後我模仿加了乙個自己的定時任務配...