Kami menggunakan .cache()
RDD untuk caching data yang persisten, Kekhawatiran saya adalah kapan cache ini akan kedaluwarsa ?.
dt = sc.parallelize([2, 3, 4, 5, 6])
dt.cache()
Kami menggunakan .cache()
RDD untuk caching data yang persisten, Kekhawatiran saya adalah kapan cache ini akan kedaluwarsa ?.
dt = sc.parallelize([2, 3, 4, 5, 6])
dt.cache()
Jawaban:
Ini tidak akan kedaluwarsa hingga Spark kehabisan memori, pada titik itu akan menghapus RDD dari cache yang paling jarang digunakan. Ketika Anda meminta sesuatu yang belum di-cache, ia akan menghitung ulang pipa dan memasukkannya ke cache lagi. Jika ini terlalu mahal, batalkan daftar RDD lainnya, jangan cache dulu atau tetap di sistem file Anda.
Selain jawaban Jan, saya ingin menunjukkan bahwa penyimpanan RDD serial (/ caching) bekerja jauh lebih baik daripada caching RDD normal untuk dataset besar .
Ini juga membantu mengoptimalkan pengumpulan sampah, jika terjadi kumpulan data besar.
Selain itu, dari spark docs:
Ketika objek Anda masih terlalu besar untuk disimpan secara efisien di samping penyetelan ini, cara yang lebih sederhana untuk mengurangi penggunaan memori adalah menyimpannya dalam bentuk berseri, menggunakan StorageLevel berseri dalam API persistensi RDD, seperti MEMORY_ONLY_SER. Spark kemudian akan menyimpan setiap partisi RDD sebagai satu array byte besar. Satu-satunya downside menyimpan data dalam bentuk serial adalah waktu akses lebih lambat, karena harus deserialize setiap objek dengan cepat. Kami sangat merekomendasikan menggunakan Kryo jika Anda ingin men-cache data dalam bentuk serial, karena mengarah ke ukuran yang jauh lebih kecil daripada serialisasi Java (dan tentu saja daripada objek Java mentah).
Spark akan secara otomatis membatalkan / membersihkan RDD atau Dataframe jika RDD tidak digunakan lagi. Untuk memeriksa apakah RDD di-cache, silakan periksa ke Spark UI dan periksa tab Storage dan lihat ke dalam rincian Memory.
Dari terminal, Anda dapat menggunakan rdd.unpersist()
atau sqlContext.uncacheTable("sparktable")
menghapus RDD atau tabel dari Memori. Spark dibuat untuk Evaluasi Malas, kecuali dan sampai Anda mengatakan tindakan apa pun, itu tidak memuat atau memproses data apa pun ke RDD atau DataFrame.
MEMORY_ONLY_SER
hanya tersedia dalam Scala / Java, bukan Python.