Jawaban:
Dengan cache()
, Anda hanya menggunakan tingkat penyimpanan default:
MEMORY_ONLY
untuk RDDMEMORY_AND_DISK
untuk DatasetDengan persist()
, Anda dapat menentukan tingkat penyimpanan yang Anda inginkan untuk RDD dan Dataset .
Dari dokumen resmi:
- Anda dapat menandai
RDD
untuk tetap menggunakan metodepersist
() ataucache
() di atasnya.- masing-masing bertahan
RDD
dapat 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_ONLY
ke RDDMEMORY_AND_DISK
untuk DatasetTautan menarik untuk dokumentasi resmi: tingkat penyimpanan mana yang harus dipilih
MEMORY_AND_DISK
adalah nilai default hanya untuk Kumpulan Data. MEMORY_ONLY
masih merupakan nilai default untuk RDD
Perbedaan antara
cache
danpersist
operasi adalah murni sintaksis. cache adalah sinonim dari persist atau persist (MEMORY_ONLY
), yaitucache
hanyapersist
dengan 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 RDD
ini disimpan dalam memori (default) atau penyimpanan yang lebih solid seperti disk dan / atau direplikasi.
RDD
s dapat di-cache menggunakan cache
operasi. Mereka juga dapat bertahan menggunakan persist
operasi.
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 varianpersist
() dancache
() hanya singkatan untukpersist(StorageLevel.MEMORY_ONLY).
Peringatan : Setelah level penyimpanan diubah, tidak dapat diubah lagi!
Hanya karena Anda dapat men-cache RDD
dalam 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_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.
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