Penjelasan Spark Accumulators: Apache Spark



Blog Apache Spark ini menjelaskan akumulator Spark secara mendetail. Pelajari penggunaan akumulator Spark dengan contoh. Akumulator percikan seperti penghitung Hadoop Mapreduce.

Kontribusi Prithviraj Bose

Berikut adalah blog tentang hal-hal yang perlu Anda ketahui tentang akumulator Spark.Dengan menjadi keterampilan utama yang diburu sebagian besar perekrut TI, pertumbuhan dan permintaannya di industri ini sangat pesat sejak awal.





Apa itu akumulator?

Akumulator adalah variabel yang digunakan untuk menggabungkan informasi di seluruh pelaksana. Misalnya, informasi ini dapat berkaitan dengan data atau diagnosis API seperti berapa banyak catatan yang rusak atau berapa kali API perpustakaan tertentu dipanggil.

adalah kotlin lebih baik dari java

Untuk memahami mengapa kita membutuhkan akumulator, mari kita lihat contoh kecilnya.



Berikut adalah catatan transaksi imajiner dari rantai toko di sekitar wilayah pusat Kolkata.

logs-Spark-accumulators

Ada 4 bidang,

Bidang 1 -> Kota



Bidang 2 -> Lokalitas

Bidang 3 -> Kategori barang yang terjual

Bidang 4 -> Nilai barang yang terjual

Namun, log bisa rusak. Misalnya, baris kedua adalah baris kosong, baris keempat melaporkan beberapa masalah jaringan dan terakhir baris terakhir menunjukkan nilai penjualan nol (yang tidak dapat terjadi!).

Kita dapat menggunakan akumulator untuk menganalisis log transaksi untuk mengetahui jumlah log kosong (baris kosong), berapa kali jaringan gagal, produk apa pun yang tidak memiliki kategori atau bahkan berapa kali nol penjualan yang dicatat. Contoh log lengkap dapat ditemukan sini .
Akumulator berlaku untuk semua operasi yang,
1. Komutatif -> f (x, y) = f (y, x) , dan
2. Asosiatif -> f (f (x, y), z) = f (f (x, z), y) = f (f (y, z), x)
Sebagai contoh, jumlah dan maks fungsi memenuhi kondisi di atas sedangkan rata-rata tidak.

Mengapa menggunakan Akumulator Percikan?

Sekarang mengapa kita membutuhkan akumulator dan mengapa tidak menggunakan variabel seperti yang ditunjukkan pada kode di bawah ini.

Masalah dengan kode di atas adalah ketika driver mencetak variabel blankLines nilainya akan menjadi nol. Ini karena ketika Spark mengirimkan kode ini ke setiap eksekutor, variabel menjadi lokal untuk eksekutor itu dan nilai yang diperbarui tidak diteruskan kembali ke driver. Untuk menghindari masalah ini perlu kita buat blankLines akumulator sehingga semua update ke variabel ini di setiap eksekutor diteruskan kembali ke driver. Jadi kode di atas harus ditulis sebagai,

Ini menjamin akumulator blankLines diperbarui di setiap pelaksana dan pembaruan diteruskan kembali ke driver.

Kami dapat menerapkan penghitung lain untuk kesalahan jaringan atau nilai penjualan nol, dll. Kode sumber lengkap bersama dengan penerapan penghitung lainnya dapat ditemukan sini .

Orang yang akrab dengan Hadoop Map-Reduce akan melihat bahwa akumulator Spark mirip dengan counter Map-Reduce Hadoop.

Peringatan

Saat menggunakan akumulator ada beberapa hal yang perlu diperhatikan sebagai programmer,

nilai default untuk string di java
  1. Perhitungan di dalam transformasi dievaluasi dengan malas, jadi kecuali file tindakan terjadi di RDD transformasi tidak dieksekusi. Karena itu, akumulator digunakan di dalam fungsi seperti peta() atau Saring() tidak akan dieksekusi kecuali beberapa tindakan terjadi di RDD.
  2. Spark menjamin untuk memperbarui akumulator dalam tindakan hanya sekali . Jadi, meskipun tugas dimulai ulang dan garis keturunan dihitung ulang, akumulator hanya akan diperbarui sekali.
  3. Spark tidak menjamin ini untuk transformasi . Jadi jika tugas dimulai ulang dan garis keturunan dihitung ulang, ada kemungkinan efek samping yang tidak diinginkan ketika akumulator akan diperbarui lebih dari sekali.

Agar aman, selalu gunakan akumulator HANYA di dalam tindakan.
Kode sini menunjukkan contoh sederhana namun efektif tentang cara mencapai hal ini.
Untuk informasi lebih lanjut tentang akumulator, baca ini .

Ada pertanyaan untuk kami? Sebutkan mereka di bagian komentar dan kami akan menghubungi Anda kembali.

Posting terkait:

Apache Spark menggabungkanByKey Explained