Jawaban:
Dengan cache(), Anda hanya menggunakan tingkat penyimpanan default:
MEMORY_ONLYuntuk RDDMEMORY_AND_DISKuntuk DatasetDengan persist(), Anda dapat menentukan tingkat penyimpanan yang Anda inginkan untuk RDD dan Dataset .
Dari dokumen resmi:
- Anda dapat menandai
RDDuntuk tetap menggunakan metodepersist() ataucache() di atasnya.- masing-masing bertahan
RDDdapat disimpan menggunakan yang berbedastorage level- Metode
cache() adalah singkatan untuk menggunakan tingkat penyimpanan default, yaituStorageLevel.MEMORY_ONLY(menyimpan objek yang di-deserialisasi dalam memori).
Gunakan persist()jika Anda ingin menetapkan tingkat penyimpanan selain dari:
MEMORY_ONLYke RDDMEMORY_AND_DISKuntuk DatasetTautan menarik untuk dokumentasi resmi: tingkat penyimpanan mana yang harus dipilih
MEMORY_AND_DISKadalah nilai default hanya untuk Kumpulan Data. MEMORY_ONLYmasih merupakan nilai default untuk RDD
Perbedaan antara
cachedanpersistoperasi adalah murni sintaksis. cache adalah sinonim dari persist atau persist (MEMORY_ONLY), yaitucachehanyapersistdengan 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,cacheFungsi-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 varianpersist() dancache() hanya singkatan untukpersist(StorageLevel.MEMORY_ONLY).Peringatan : Setelah level penyimpanan diubah, tidak dapat diubah lagi!
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)
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:
Caching dapat meningkatkan kinerja aplikasi Anda secara luas.
Spark memberikan 5 jenis tingkat Penyimpanan
MEMORY_ONLYMEMORY_ONLY_SERMEMORY_AND_DISKMEMORY_AND_DISK_SERDISK_ONLYcache()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.
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).
cache()sekarang gunakan MEMORY_AND_DISK