RDD menggunakan Spark: The Building Block Apache Spark



Blog di RDD menggunakan Spark ini akan memberi Anda pengetahuan terperinci dan komprehensif tentang RDD, yang merupakan unit dasar dari Spark & ​​Seberapa berguna itu.

, Kata itu sendiri sudah cukup untuk membangkitkan percikan di benak setiap insinyur Hadoop. UNTUK n dalam memori alat pengolah yang secepat kilat dalam komputasi cluster. Dibandingkan dengan MapReduce, berbagi data dalam memori membuat RDD 10-100x lebih cepat daripada berbagi jaringan dan disk dan semua ini dimungkinkan karena RDD (Kumpulan Data Terdistribusi Tangguh). Poin utama yang kami fokuskan hari ini di RDD menggunakan artikel Spark ini adalah:

Butuh RDD?

Mengapa kita membutuhkan RDD? -RDD menggunakan Spark





Dunia berkembang bersama dan Ilmu Data karena kemajuan dalam . Algoritma berdasarkan Regresi , , dan yang berjalan Didistribusikan Komputasi Iteratif asi mode yang mencakup Penggunaan Kembali dan Berbagi data di antara beberapa unit komputasi.

Tradisional teknik membutuhkan penyimpanan Stabil Menengah dan Terdistribusi seperti HDFS terdiri dari komputasi berulang dengan replikasi data dan serialisasi data, yang membuat prosesnya jauh lebih lambat. Menemukan solusi tidak pernah mudah.



Ini dimana RDD (Set Data Terdistribusi Tangguh) datang ke gambaran besar.

RDD s mudah digunakan dan mudah dibuat karena data diimpor dari sumber data dan dimasukkan ke dalam RDD. Selanjutnya, operasi diterapkan untuk memprosesnya. Mereka adalah koleksi memori yang terdistribusi dengan izin sebagai Hanya baca dan yang terpenting, mereka Toleransi terhadap kesalahan .



Jika ada partisi data dari RDD adalah kalah , itu bisa dibuat ulang dengan menerapkan hal yang sama transformasi operasi pada partisi yang hilang itu di garis keturunan , daripada memproses semua data dari awal. Pendekatan semacam ini dalam skenario waktu nyata dapat membuat keajaiban terjadi dalam situasi kehilangan data atau saat sistem mati.

Apa RDD itu?

RDD atau ( Kumpulan Data Terdistribusi Tangguh ) adalah fundamental struktur data di Spark. Syarat Elastis mendefinisikan kemampuan yang menghasilkan data secara otomatis atau data bergulir kembali ke keadaan asli ketika bencana tak terduga terjadi dengan kemungkinan kehilangan data.

Data yang ditulis ke dalam RDD adalah dipartisi dan disimpan ke beberapa node yang dapat dieksekusi . Jika node pelaksana gagal dalam waktu proses, lalu langsung mendapatkan cadangan dari node yang dapat dieksekusi berikutnya . Inilah sebabnya mengapa RDD dianggap sebagai tipe struktur data tingkat lanjut jika dibandingkan dengan struktur data tradisional lainnya. RDD dapat menyimpan data terstruktur, tidak terstruktur, dan semi-terstruktur.

Mari kita lanjutkan dengan RDD menggunakan blog Spark dan pelajari tentang fitur unik RDD yang memberikan keunggulan dibandingkan jenis struktur data lainnya.

Fitur RDD

  • Dalam kenangan (RAM) Perhitungan : Konsep In-Memory Computation membawa pemrosesan data ke tahap yang lebih cepat dan efisien secara keseluruhan kinerja dari sistem ini ditingkatkan.
  • L Evaluasinya : Istilah evaluasi malas mengatakan transformasi diterapkan ke data dalam RDD, tetapi keluarannya tidak dihasilkan. Sebaliknya, transformasi yang diterapkan adalah login.
  • Kegigihan : RDD yang dihasilkan selalu dapat digunakan kembali.
  • Operasi Berbutir Kasar : Pengguna dapat menerapkan transformasi ke semua elemen dalam kumpulan data melalui peta, Saring atau dikelompokkan menurut operasi.
  • Toleransi Kesalahan : Jika ada data yang hilang, sistem bisa memutar kembali untuk itu keadaan asli dengan menggunakan login transformasi .
  • Kekekalan : Data yang ditentukan, diambil atau dibuat tidak dapat berubah setelah masuk ke sistem. Jika Anda perlu mengakses dan mengubah RDD yang ada, Anda harus membuat RDD baru dengan menerapkan sekumpulan Transformasi berfungsi ke RDD saat ini atau sebelumnya.
  • Mempartisi : Ini adalah unit penting paralelisme di Spark RDD. Secara default, jumlah partisi yang dibuat didasarkan pada sumber data Anda. Anda bahkan dapat menentukan jumlah partisi yang ingin Anda gunakan partisi khusus fungsi.

Pembuatan RDD menggunakan Spark

RDD dapat dibuat di tiga jalan:

  1. Membaca data dari koleksi paralel
val PCRDD = spark.sparkContext.parallelize (Array ('Sen', 'Tue', 'Rab', 'Thu', 'Fri', 'Sab'), 2) val resultRDD = PCRDD.collect () resultRDD.collect ( ) .foreach (println)
  1. Menerapkan transformasi pada RDD sebelumnya
val words = spark.sparkContext.parallelize (Seq ('Spark', 'is', 'a', 'very', 'powerful', 'language')) val wordpair = words.map (w = (w.charAt ( 0), w)) wordpair.collect (). Foreach (println)
  1. Membaca data dari penyimpanan luar atau jalur file seperti HDFS atau HBase
val Sparkfile = spark.read.textFile ('/ user / edureka_566977 / spark / spark.txt.') Sparkfile.collect ()

Operasi yang dilakukan pada RDD:

Ada dua jenis operasi yang dilakukan pada RDD, yaitu:

  • Transformasi
  • Tindakan

Transformasi : Itu operasi kami menerapkan RDD ke filter, akses dan memodifikasi data di RDD induk untuk menghasilkan RDD berturut-turut disebut transformasi . RDD baru mengembalikan pointer ke RDD sebelumnya untuk memastikan ketergantungan di antara keduanya.

Transformasi adalah Evaluasi Malas, dengan kata lain, operasi yang diterapkan pada RDD yang Anda kerjakan akan dicatat tetapi tidak dieksekusi. Sistem menampilkan hasil atau pengecualian setelah memicu Tindakan .

cara mengatur classpath di java di windows 10

Kita dapat membagi transformasi menjadi dua jenis seperti di bawah ini:

  • Transformasi Sempit
  • Transformasi Luas

Transformasi Sempit Kami menerapkan transformasi sempit ke a partisi tunggal RDD induk untuk menghasilkan RDD baru karena data yang diperlukan untuk memproses RDD tersedia di satu partisi file orang tua ASD . Contoh transformasi sempit adalah:

  • peta()
  • Saring()
  • flatMap ()
  • partisi ()
  • mapPartitions ()

Transformasi Luas: Kami menerapkan transformasi luas banyak partisi untuk menghasilkan RDD baru. Data yang diperlukan untuk memproses RDD tersedia di beberapa partisi file orang tua ASD . Contoh transformasi luas adalah:

  • reduceBy ()
  • Persatuan()

Tindakan : Tindakan memerintahkan Apache Spark untuk diterapkan komputasi dan meneruskan hasil atau pengecualian kembali ke RDD driver. Beberapa tindakan termasuk:

  • mengumpulkan()
  • menghitung()
  • mengambil()
  • pertama()

Mari kita secara praktis menerapkan operasi pada RDD:

IPL (Liga Utama India) adalah turnamen kriket yang sudah mencapai puncaknya. Jadi, mari hari ini mendapatkan kumpulan data IPL dan menjalankan RDD kami menggunakan Spark.

  • Pertama, mari kita unduh data kecocokan CSV dari IPL. Setelah mengunduhnya, itu mulai terlihat sebagai file EXCEL dengan baris dan kolom.

Pada langkah berikutnya, kami menjalankan percikan dan memuat file match.csv dari lokasinya, dalam kasus saya mycsvlokasi file adalah “/User/edureka_566977/test/matches.csv”

Sekarang mari kita Mulai dengan Transformasi bagian pertama:

  • peta():

Kita gunakan Transformasi Peta untuk menerapkan operasi transformasi tertentu pada setiap elemen RDD. Di sini kami membuat RDD dengan nama CKfile tempat menyimpan filecsvmengajukan. Kami akan membuat RDD lain yang disebut Serikat ke menyimpan detail kota .

spark2-shell val CKfile = sc.textFile ('/ user / edureka_566977 / test / match.csv') CKfile.collect.foreach (println) val state = CKfile.map (_. split (',') (2)) States.collect (). foreach (println)

  • Saring():

Transformasi filter, nama itu sendiri menjelaskan penggunaannya. Kami menggunakan operasi transformasi ini untuk menyaring data selektif dari kumpulan data yang diberikan. Kami melamar operasi filter di sini untuk mendapatkan catatan pertandingan IPL tahun ini 2017 dan simpan di fil RDD.

val fil = CKfile.filter (line => line.contains ('2017')) fil.collect (). foreach (println)

  • flatMap ():

Kami menerapkan flatMap adalah operasi transformasi ke setiap elemen RDD untuk membuat newRDD. Ini mirip dengan transformasi Peta. di sini kami melamarPeta dataruntuk memuntahkan pertandingan kota Hyderabad dan menyimpan data kefilRDDRDD.

val filRDD = fil.flatMap (line => line.split ('Hyderabad')). collect ()

  • partisi ():

Setiap data yang kami tulis ke dalam RDD dibagi menjadi beberapa partisi. Kami menggunakan transformasi ini untuk menemukan file jumlah partisi data sebenarnya dipecah menjadi.

val fil = CKfile.filter (line => line.contains ('2017')) fil.partitions.size

  • mapPartitions ():

Kami menganggap MapPatitions sebagai alternatif dari Map () danuntuk setiap() bersama. Kami menggunakan mapPartitions di sini untuk menemukan jumlah baris yang kami miliki di fil RDD kami.

val fil = CKfile.filter (line => line.contains ('2016')) fil.mapPartitions (idx => Array (idx.size) .iterator) .collect

  • reduceBy ():

Kita gunakanReduceBy() di Pasangan Kunci-Nilai . Kami menggunakan transformasi ini pada kamicsvfile untuk menemukan pemutar dengan Man of the match tertinggi .

val ManOfTheMatch = CKfile.map (_. split (',') (13)) val MOTMcount = ManOfTheMatch.map (WINcount => (WINcount, 1)) val ManOTH = MOTMcount.reduceByKey ((x, y) => x + y) .map (tup => (tup._2, tup._1)) sortByKey (false) ManOTH.take (10) .foreach (println)

Dalam kumpulan konstan string, tidak akan ada dua objek string yang memiliki konten yang sama.
  • Persatuan():

Nama menjelaskan itu semua, Kami menggunakan transformasi serikat adalah untuk menggabungkan dua RDD bersama . Di sini kami membuat dua RDD yaitu fil dan fil2. fil RDD berisi catatan pertandingan IPL 2017 dan fil2 RDD berisi catatan pertandingan IPL 2016.

val fil = CKfile.filter (line => line.contains ('2017')) val fil2 = CKfile.filter (line => line.contains ('2016')) val uninRDD = fil.union (fil2)

Mari kita mulai dengan Tindakan bagian di mana kami menunjukkan hasil aktual:

  • mengumpulkan():

Mengumpulkan adalah tindakan yang kami gunakan untuk tampilkan isinya di RDD.

val CKfile = sc.textFile ('/ user / edureka_566977 / test / match.csv') CKfile.collect.foreach (println)

  • menghitung():

Menghitungadalah tindakan yang kami gunakan untuk menghitung jumlah catatan hadir di RDD.Sinikami menggunakan operasi ini untuk menghitung jumlah total rekaman dalam file match.csv kami.

val CKfile = sc.textFile ('/ user / edureka_566977 / test / match.csv') CKfile.count ()

  • mengambil():

Take adalah operasi Tindakan yang mirip dengan mengumpulkan tetapi satu-satunya perbedaan adalah dapat mencetak apa pun jumlah baris selektif sesuai permintaan pengguna. Di sini kami menerapkan kode berikut untuk mencetak sepuluh laporan terkemuka.

val statecountm = Scount.reduceByKey ((x, y) => x + y) .map (tup => (tup._2, tup._1)) sortByKey (false) statecountm.collect (). foreach (println) statecountm. ambil (10) .foreach (println)

  • pertama():

First () adalah operasi tindakan yang mirip dengan collect () dan take ()saya tdigunakan untuk mencetak laporan paling atas s output Di sini kita menggunakan operasi first () untuk menemukan jumlah maksimum pertandingan yang dimainkan di kota tertentu dan kami mendapatkan Mumbai sebagai hasilnya.

val CKfile = sc.textFile ('/ user / edureka_566977 / test / match.csv') val state = CKfile.map (_. split (',') (2)) val Scount = states.map (Scount => ( Hitung, 1)) skala & gt val jumlah statistik = Hitung.reduceByKey ((x, y) => x + y) .collect.foreach (println) Scount.reduceByKey ((x, y) => x + y) .collect.foreach (println) val statecountm = Scount.reduceByKey ((x, y) => x + y) .map (tup => (tup._2, tup._1)) sortByKey (false) statecountm.first ()

Untuk membuat proses kami belajar RDD menggunakan Spark, bahkan lebih menarik, saya telah menemukan kasus penggunaan yang menarik.

RDD menggunakan Spark: Kasus Penggunaan Pokemon

  • Pertama, Mari kita unduh file Pokemon.csv dan muat ke spark-shell seperti yang kita lakukan ke file Matches.csv.
val PokemonDataRDD1 = sc.textFile ('/ user / edureka_566977 / PokemonFile / PokemonData.csv') PokemonDataRDD1.collect (). foreach (println)

Pokemons sebenarnya tersedia dalam jumlah besar, Mari kita temukan beberapa varietas.

c ++ pertanyaan wawancara stl
  • Menghapus skema dari file Pokemon.csv

Kami mungkin tidak membutuhkan Skema dari file Pokemon.csv. Karenanya, kami menghapusnya.

val Head = PokemonDataRDD1.first () val NoHeader = PokemonDataRDD1.filter (line =>! line.equals (Head))

  • Menemukan bilangan partisi pokemon.csv kami didistribusikan ke.
println ('No.ofpartitions =' + NoHeader.partitions.size)

  • Pokemon air

Menemukan jumlah pokemon Air

val WaterRDD = PokemonDataRDD1.filter (line => line.contains ('Water')) WaterRDD.collect (). foreach (println)

  • Api Pokemon

Menemukan jumlah pokemon Api

val FireRDD = PokemonDataRDD1.filter (line => line.contains ('Fire')) FireRDD.collect (). foreach (println)

  • Kami juga dapat mendeteksi file populasi dari jenis pokemon yang berbeda menggunakan fungsi hitungan
WaterRDD.count () FireRDD.count ()

  • Karena saya suka permainan strategi pertahanan mari kita temukan pokemon dengan pertahanan maksimal.
val defenceList = NoHeader.map {x => x.split (',')}. map {x => (x (6) .toDouble)} println ('Highest_Defence:' + defenceList.max ())

  • Kami tahu maksimal nilai kekuatan pertahanan tapi kami tidak tahu pokemon mana itu. jadi, mari kita cari yang itu pokemon.
val defWithPokemonName = NoHeader.map {x => x.split (',')}. map {x => (x (6) .toDouble, x (1))} val MaxDefencePokemon = defWithPokemonName.groupByKey.takeOrdered (1) (Memesan [Double] .reverse.on (_._ 1)) MaxDefencePokemon.foreach (println)

  • Sekarang mari kita urutkan pokemon dengan Setidaknya Pertahanan
val minDefencePokemon = defenceList.distinct.sortBy (x => x.toDouble, true, 1) minDefencePokemon.take (5) .foreach (println)

  • Sekarang mari kita lihat Pokemon dengan file strategi yang kurang defensif.
val PokemonDataRDD2 = sc.textFile ('/ user / edureka_566977 / PokemonFile / PokemonData.csv') val Head2 = PokemonDataRDD2.first () val NoHeader2 = PokemonDataRDD2.filter (line =>! line.equals (Head No)) val defWithPokHemonName2 .map {x => x.split (',')}. map {x => (x (6) .toDouble, x (1))} val MinDefencePokemon2 = defWithPokemonName2.groupByKey.takeOrdered (1) (Memesan [Ganda ] .on (_._ 1)) MinDefencePokemon2.foreach (println)

Jadi, dengan ini, kami mengakhiri RDD ini menggunakan artikel Spark. Saya harap kami memberi sedikit penjelasan tentang pengetahuan Anda tentang RDD, fiturnya, dan berbagai jenis operasi yang dapat dilakukan padanya.

Artikel ini berdasarkan dirancang untuk mempersiapkan Anda menghadapi Ujian Sertifikasi Pengembang Cloudera Hadoop dan Spark (CCA175). Anda akan mendapatkan pengetahuan mendalam tentang Apache Spark dan Ekosistem Spark, yang mencakup Spark RDD, Spark SQL, Spark MLlib, dan Spark Streaming. Anda akan mendapatkan pengetahuan yang komprehensif tentang bahasa Pemrograman Scala, HDFS, Sqoop, Flume, Spark GraphX ​​dan Sistem Pesan seperti Kafka.