2017-10-18 7 views
-1

私はsparkのcassandraから読み込まれたデータセットを持っています。このデータセットをロードした後、私はcassandraからいくつかの項目を削除しますが、私のデータセットを次の計算のための最初のものにします。私はそれを解決するためにpersist(DISK_ONLY)を使用しましたが、それは最善の努力のようです。 再計算を避けるためにsparkを強制するにはどうすればよいですか?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

は、最適化の方法です。それらに保証はありません。 –

+0

私はどこにも言及していないことに同意します.DAGは実行からそのステージをスキップします。しかし、** RDDは、どんな段階でもrddが持続された場合に呼び出されるアクションが繰り返されるたびに、再計算されません。 – mrsrinivas

答えて

2

スパークcacheがこの方法を使用するものではありません。これは最適化であり、最も守秘的なStorageLevelsDISK_ONLY_2)であっても、作業者の故障や廃止の場合にデータが失われ、再計算される可能性があります。

Checkpointへの信頼性の高いファイルシステムが良い選択肢かもしれませんが、データが失われる可能性のある境界線が存在する可能性があります。

ヨ正確を確実に私は強く少なくとも、分散ファイルシステムと同様に、永続ストレージに中間データを書き込み、それを読み戻す推薦する:スパークキャッシュと永続@mrsrinivas

dataset.write.format(...).save("persisted/location") 
... // Remove data from the source 
spark.read.format(...).load("persisted/location") //reading the same again 
関連する問題