pysparkのRDDのキャッシュはいつ期限切れになりますか?


10

.cache()データセットの永続的なキャッシュにRDD を使用していますが、このキャッシュがいつ期限切れになるのか心配です。

dt = sc.parallelize([2, 3, 4, 5, 6])
dt.cache()

回答:


12

Sparkがメモリ不足になるまで期限切れになりません。その時点で、使用頻度が最も低いRDDがキャッシュから削除されます。キャッシュされていないものを要求すると、パイプラインが再計算され、再度キャッシュに入れられます。これが高すぎる場合は、他のRDDを永続化しないか、最初にそれらをキャッシュしないか、ファイルシステムに永続化しないでください。


6

Janの回答に加えて、シリアル化されたRDD ストレージ(/ caching)は、大規模なデータセットの通常のRDDキャッシュよりもはるかにうまく機能することを指摘しておきます。

また、データセットが大きい場合のガベージコレクションの最適化にも役立ちます。

さらに、spark docsから:

この調整にもかかわらずオブジェクトがまだ大きすぎて効率的に格納できない場合、メモリ使用量を削減するはるかに簡単な方法は、MEMORY_ONLY_SERなどのRDD永続化APIでシリアル化されたStorageLevelsを使用して、シリアル化された形式でオブジェクトを格納することです。次に、Sparkは各RDDパーティションを1つの大きなバイト配列として格納します。シリアル化された形式でデータを保存することの唯一の欠点は、その場で各オブジェクトを逆シリアル化する必要があるため、アクセス時間が遅くなることです。シリアル化された形式でデータをキャッシュしたい場合は、Kryoを使用することを強くお勧めします。これは、Javaのシリアル化よりも(そして、未加工のJavaオブジェクトよりも)サイズがはるかに小さくなるためです。


ただ注意:MEMORY_ONLY_SERPythonではなくScala / Javaでのみ利用可能です。
Def_Os 2017

1

RDDが使用されなくなった場合、Sparkは自動的にRDDまたはデータフレームを永続化または消去します。RDDがキャッシュされているかどうかを確認するには、Spark UIにチェックインし、[ストレージ]タブをチェックして、メモリの詳細を確認してください。

端末から、rdd.unpersist()またはsqlContext.uncacheTable("sparktable")を使用して、メモリからRDDまたはテーブルを削除できます。遅延評価用に作成されたSparkは、アクションを実行するまで、RDDまたはDataFrameにデータをロードまたは処理しません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.