2017-10-18 110 views
-1

我有一個數據集是從卡桑德拉火花加載。加載這個數據集後,我將從cassandra中刪除一些項目,但我希望我的數據集作爲下一次計算的第一個數據集。我用persist(DISK_ONLY)來解決它,但它似乎盡力而爲。 如何強制使用火花以避免重新計算?如何強制spark以避免數據集重新計算?

例如:

val dataset:Dataset[Int] = ??? // something from cassandra 
dataset.persist(StorageLevel.DISK_ONLY) // it's best effort 
dataset.count // = 2n 
dataset.persist(_ % 2 == 0).remove // remove from cassandra 
data.count // = n => I need orginal dataset here 
+0

@mrsrinivas火花緩存和持久性是最優化的方式。對他們沒有保證。 –

+0

我同意,我從來沒有提到任何地方DAG將跳過執行階段。但是,如果rdd在任何階段持續**,每次調用RDD時都不會重新計算RDD。 – mrsrinivas

回答

2

火花cache不旨在使用這種方式。這是一種優化,即使是最保守的((DISK_ONLY_2)),如果發生工人故障或退役,數據可能會丟失並重新計算。

Checkpoint到一個可靠的文件系統可能是一個更好的選擇,但我懷疑可能會有一些邊界情況下,這可能會導致數據丟失。

呦確保正確性我會強烈建議至少中間數據寫入到永久存儲,如分佈式文件系統,並讀:

dataset.write.format(...).save("persisted/location") 
... // Remove data from the source 
spark.read.format(...).load("persisted/location") //reading the same again