Apa perbedaan antara cache dan bertahan?

Jawaban:

222

Dengan cache(), Anda hanya menggunakan tingkat penyimpanan default:

  • MEMORY_ONLYuntuk RDD
  • MEMORY_AND_DISKuntuk Dataset

Dengan persist(), Anda dapat menentukan tingkat penyimpanan yang Anda inginkan untuk RDD dan Dataset .

Dari dokumen resmi:

  • Anda dapat menandai RDDuntuk tetap menggunakan metode persist() atau cache() di atasnya.
  • masing-masing bertahan RDDdapat disimpan menggunakan yang berbedastorage level
  • Metode cache() adalah singkatan untuk menggunakan tingkat penyimpanan default, yaitu StorageLevel.MEMORY_ONLY(menyimpan objek yang di-deserialisasi dalam memori).

Gunakan persist()jika Anda ingin menetapkan tingkat penyimpanan selain dari:

  • MEMORY_ONLYke RDD
  • atau MEMORY_AND_DISKuntuk Dataset

Tautan menarik untuk dokumentasi resmi: tingkat penyimpanan mana yang harus dipilih

ahars
sumber
17
Perhatikan bahwa cache()sekarang gunakan MEMORY_AND_DISK
ximiki
Saya kira komentar di atas tidak benar. Membaca dokumentasi resmi terbaru, menggunakan tautan tautan menyediakan sejajar dengan titik peluru terakhir ... Metode cache () adalah singkatan untuk menggunakan tingkat penyimpanan default, yaitu StorageLevel.MEMORY_ONLY (menyimpan objek yang terhapuskan dalam memori).
user2596560
1
@ximiki, MEMORY_AND_DISKadalah nilai default hanya untuk Kumpulan Data. MEMORY_ONLYmasih merupakan nilai default untuk RDD
ahars
1
@ user2596560 komentar sudah benar untuk nilai cache default dari dataset. Anda benar untuk RDD yang masih menyimpan nilai default
MEMORY_ONLY
83

Perbedaan antara cachedan persistoperasi adalah murni sintaksis. cache adalah sinonim dari persist atau persist ( MEMORY_ONLY), yaitu cachehanya persistdengan tingkat penyimpanan defaultMEMORY_ONLY


/ ** * Tetaplah menggunakan RDD ini dengan tingkat penyimpanan default ( MEMORY_ONLY). * /
def persist (): this.type = persist (StorageLevel.MEMORY_ONLY)

/ ** * Tetaplah menggunakan RDD ini dengan tingkat penyimpanan default ( MEMORY_ONLY). * /
def cache (): this.type = persist ()

lihat lebih detail di sini ...


Caching atau persistensi adalah teknik optimisasi untuk perhitungan Spark (iteratif dan interaktif). Mereka membantu menyimpan hasil sebagian sementara sehingga dapat digunakan kembali pada tahap berikutnya. Dengan demikian, hasil sementara RDDini disimpan dalam memori (default) atau penyimpanan yang lebih solid seperti disk dan / atau direplikasi. RDDs dapat di-cache menggunakan cacheoperasi. Mereka juga dapat bertahan menggunakan persistoperasi.

persist, cache

Fungsi-fungsi ini dapat digunakan untuk menyesuaikan tingkat penyimpanan a RDD. Saat membebaskan memori, Spark akan menggunakan pengidentifikasi tingkat penyimpanan untuk memutuskan partisi mana yang harus disimpan. Parameter kurang varian persist() dan cache() hanya singkatan untuk persist(StorageLevel.MEMORY_ONLY).

Peringatan : Setelah level penyimpanan diubah, tidak dapat diubah lagi!

Peringatan -Cache dengan bijaksana ... lihat ( (Mengapa) kita perlu memanggil cache atau tetap menggunakan RDD )

Hanya karena Anda dapat men-cache RDDdalam memori tidak berarti Anda harus melakukannya secara membabi buta. Bergantung pada berapa kali dataset diakses dan jumlah pekerjaan yang terlibat dalam melakukannya, perhitungan ulang bisa lebih cepat daripada harga yang dibayarkan oleh tekanan memori yang meningkat.

Seharusnya tidak perlu dikatakan bahwa jika Anda hanya membaca dataset setelah tidak ada gunanya menyimpannya, itu sebenarnya akan membuat pekerjaan Anda lebih lambat. Ukuran dataset yang di-cache dapat dilihat dari Spark Shell ..

Varian Cantuman ...

def cache(): RDD[T]
 def persist(): RDD[T]
 def persist(newLevel: StorageLevel): RDD[T]

* Lihat contoh di bawah ini: *

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)

masukkan gambar di sini

Catatan: Karena perbedaan sintaksis yang sangat kecil dan murni antara caching dan persistensi RDD, kedua istilah ini sering digunakan secara bergantian.

Lihat lebih banyak di sini ....

Tetap ada di memori dan disk:

masukkan deskripsi gambar di sini

Cache

Caching dapat meningkatkan kinerja aplikasi Anda secara luas.

masukkan deskripsi gambar di sini

Ram Ghadiyaram
sumber
Saya memiliki DF di dalam blok. Bagaimana saya bisa mengaksesnya.
Bindumalini KK
48

Tidak ada perbedaan. Dari RDD.scala.

/** Persist this RDD with the default storage level (`MEMORY_ONLY`). */
def persist(): this.type = persist(StorageLevel.MEMORY_ONLY)

/** Persist this RDD with the default storage level (`MEMORY_ONLY`). */
def cache(): this.type = persist()
Mike Park
sumber
23

Spark memberikan 5 jenis tingkat Penyimpanan

  • MEMORY_ONLY
  • MEMORY_ONLY_SER
  • MEMORY_AND_DISK
  • MEMORY_AND_DISK_SER
  • DISK_ONLY

cache()akan digunakan MEMORY_ONLY. Jika Anda ingin menggunakan sesuatu yang lain, gunakan persist(StorageLevel.<*type*>).

Secara default persist()akan menyimpan data di tumpukan JVM sebagai objek yang tidak di-serialisasi.

ketankk
sumber
4

Cache () dan bertahan () kedua metode digunakan untuk meningkatkan kinerja perhitungan percikan. Metode ini membantu untuk menyimpan hasil antara sehingga dapat digunakan kembali pada tahap berikutnya.

Satu-satunya perbedaan antara cache () dan bertahan () adalah, dengan menggunakan teknik Cache kita dapat menyimpan hasil antara dalam memori hanya bila diperlukan sementara di Persist () kita dapat menyimpan hasil antara dalam 5 tingkat penyimpanan (MEMORY_ONLY, MEMORY_AND_DISK, MEMORY_ONLY_SER, MEMORY_AND_DISK_SER, DISK_ONLY).

pengguna11332824
sumber