回答:
ではcache()
、デフォルトのストレージレベルのみを使用します。
MEMORY_ONLY
以下のためのRDDMEMORY_AND_DISK
以下のためのデータセットではpersist()
、RDDとデータセットの両方に必要なストレージレベルを指定できます。
公式ドキュメントから:
- ()または()メソッド
RDD
を使用して、永続化するようにマークを付けることができます。persist
cache
- それぞれの永続化
RDD
は、別の方法で保存できますstorage level
cache
()メソッドは、デフォルトのストレージ・レベルを使用するための省略形であるStorageLevel.MEMORY_ONLY
(ストアはメモリ内のオブジェクトをデシリアライズ)。
次persist()
以外のストレージレベルを割り当てる場合に使用します。
MEMORY_ONLY
RDDMEMORY_AND_DISK
のためのデータセット公式ドキュメントへの興味深いリンク:選択するストレージレベル
MEMORY_AND_DISK
は、データセットのみのデフォルト値です。MEMORY_ONLY
まだRDDのデフォルト値です
cache
とpersist
操作の違いは、純粋に構文上のものです。キャッシュは、persistまたはpersist(MEMORY_ONLY
)の同義語です。つまり 、デフォルトのストレージレベルcache
のみpersist
です。MEMORY_ONLY
/ ** *このRDDをデフォルトのストレージレベル(
MEMORY_ONLY
)で永続化します。* /
def persist():this.type = persist(StorageLevel.MEMORY_ONLY)/ ** *このRDDをデフォルトのストレージレベル(
MEMORY_ONLY
)で永続化します。* /
def cache():this.type = persist()
詳細はこちら...
キャッシングまたは永続化は、(反復的でインタラクティブな)Spark計算の最適化手法です。それらは中間結果の保存に役立ち、後続の段階で再利用できます。RDD
したがって、これらの中間結果はs としてメモリ(デフォルト)に保持されるか、ディスクなどのより強固なストレージに保存されるか、複製されます。
RDD
sは、cache
操作を使用してキャッシュできます。また、persist
操作を使用して永続化することもできます。
persist
、cache
これらの関数を使用して、のストレージレベルを調整できます
RDD
。メモリを解放するとき、Sparkはストレージレベルの識別子を使用して、保持するパーティションを決定します。パラメータless lesspersist
()およびcache
()は、persist(StorageLevel.MEMORY_ONLY).
警告:ストレージレベルを変更すると、再度変更することはできません。
RDD
メモリにキャッシュできるからといって、盲目的にキャッシュする必要があるわけではありません。データセットへのアクセス回数とそれに関連する作業量に応じて、再計算は、増加したメモリプレッシャーによって支払われる価格よりも速くなる可能性があります。
言うまでもなく、データセットをキャッシュする意味がないときにデータセットを読み取るだけでは、実際にはジョブが遅くなります。キャッシュされたデータセットのサイズは、Spark Shellから確認できます。
バリアントのリスト...
def cache(): RDD[T]
def persist(): RDD[T]
def persist(newLevel: StorageLevel): RDD[T]
*以下の例を参照してください:*
val c = sc.parallelize(List("Gnu", "Cat", "Rat", "Dog", "Gnu", "Rat"), 2)
c.getStorageLevel
res0: org.apache.spark.storage.StorageLevel = StorageLevel(false, false, false, false, 1)
c.cache
c.getStorageLevel
res2: org.apache.spark.storage.StorageLevel = StorageLevel(false, true, false, true, 1)
注:のキャッシングと永続性の間の非常に小さく純粋な構文上の違いによりRDD
、2つの用語はしばしば同じ意味で使用されます。
ここでもっと視覚的に見てください...
メモリとディスクに永続化:
キャッシングにより、アプリケーションのパフォーマンスを大幅に改善できます。
Cache()とpersist()の両方のメソッドは、spark計算のパフォーマンスを向上させるために使用されます。これらの方法は、中間結果を保存して、後続の段階で再利用できるようにするのに役立ちます。
cache()とpersist()の唯一の違いは、キャッシュ手法を使用して、必要な場合にのみ中間結果をメモリに保存できる一方で、Persist()では5つのストレージレベル(MEMORY_ONLY、MEMORY_AND_DISK、MEMORY_ONLY_SER、MEMORY_AND_DISK_SER、 DISK_ONLY)。
cache()
使用することに注意してください