Klasifikasi operator percikan
Dari perspektif umum, operator percikan dapat dibagi secara kasar menjadi dua kategori berikut:
1) Transformasi Transformasi/Operator Konversi: Transformasi ini tidak memicu pengajuan pekerjaan dan menyelesaikan pemrosesan proses perantara pekerjaan.
Operasi transformasi adalah perhitungan yang tertunda, yang berarti bahwa operasi konversi untuk menghasilkan RDD lain dari satu konversi RDD tidak segera dieksekusi. Dibutuhkan menunggu sampai operasi tindakan tersedia sebelum operasi akan dipicu.
2) Operator Tindakan Tindakan: Jenis operator ini akan memicu SparkContext untuk mengirimkan pekerjaan pekerjaan.
Operator Tindakan akan memicu pekerjaan pengiriman Spark (pekerjaan) dan mengeluarkan data ke sistem Spark.
Dari perspektif kecil, operator percikan dapat dibagi secara kasar menjadi tiga kategori berikut:
1) Operator transformasi tipe data nilai. Transformasi ini tidak memicu pengiriman pekerjaan. Item data yang diproses adalah data tipe nilai.
2) Operator transfromasi dari tipe data nilai kunci. Transformasi ini tidak memicu pengiriman pekerjaan. Item data untuk diproses adalah pasangan data nilai kunci.
3) Operator Tindakan, jenis operator ini akan memicu SparkContext untuk mengirimkan pekerjaan pekerjaan.
perkenalan
Biasanya lebih nyaman untuk menulis program Spark dengan Scala, setelah semua, kode sumber Spark ditulis di Scala. Namun, ada banyak pengembang Java saat ini, terutama ketika data docking dan layanan online. Saat ini, Anda perlu menguasai beberapa metode menggunakan Spark di Java.
1. Peta
Peta tidak dapat digunakan lebih sering saat memproses dan mengonversi data
Sebelum menggunakan peta, Anda harus terlebih dahulu mendefinisikan format fungsi yang diubah sebagai berikut:
Fungsi <String, LabeledPoint> Transform = Fungsi Baru <String, LabeledPoint> () {// String adalah jenis input dari baris tertentu labelpoint adalah tipe keluaran output yang dikonversi @Override Publicpoint Panggilan (string row) melempar Exception {// Tulis ulang string metode panggilan [] rowarr = row.split (","); int rowsize = rowarr.length; Double [] doubleArr = Double baru [Rowsize-1]; // Kecuali untuk lable pertama, bagian lain dari bagian ini diuraikan menjadi ganda dan dimasukkan ke dalam array untuk (int i = 1; i <rowsize; i ++) {string masing -masing = rowarr [i]; doubleArr [i] = double.parsedouble (masing -masing); } // Konversi data yang baru saja Anda peroleh menjadi fitur vektor vektor = vektor.dense (doubleArr); label ganda = double.parsedouble (rowarr [0]); // Bangun format data untuk pelatihan klasifikasi LabelPoint LabeledPoint point = New LabeledPoint (Label, fitur); titik balik; }};Perhatian khusus harus diberikan pada:
1. Input dari metode panggilan harus menjadi jenis baris data sebelum konversi. Nilai pengembalian harus menjadi jenis baris data setelah diproses.
2. Jika kelas khusus dipanggil dalam metode konversi, perhatikan bahwa nama kelas harus diserialisasi, misalnya
Kelas publik Treeensemble mengimplementasikan serializable {}3. Jika beberapa objek kelas dipanggil dalam fungsi konversi, seperti metode perlu memanggil parameter eksternal, atau model pemrosesan numerik (standardisasi, normalisasi, dll.), Objek perlu dinyatakan final.
Kemudian panggil fungsi konversi jika perlu
Javardd <labeledpoint> rdd = oridata.tojavardd (). Map (transform);
Metode ini membutuhkan konversi RDD biasa ke Javardd untuk digunakan. Pengoperasian Konversi ke Javardd tidak memakan waktu, jadi jangan khawatir
2. Filter
Ini juga sangat umum digunakan dalam skenario seperti menghindari nilai data nol dan 0s, dan dapat memenuhi fungsi di mana di SQL
Pertama -tama, kita perlu mendefinisikan fungsi. Efek aktual dari mengembalikan nilai boolean yang diberikan garis data adalah menyimpan data yang dikembalikan ke true.
Fungsi <String, Boolean> boolfilter = Fungsi baru <String, Boolean> () {// String adalah jenis input dari baris tertentu. Boolean adalah tipe output yang sesuai. Digunakan untuk menentukan apakah data disimpan. @Override Public Boolean Call (String Row) melempar Exception {// Tulis ulang metode panggilan boolean flag = row! = Null; pengembalian bendera; }};Biasanya, apa yang perlu dimodifikasi dalam penggunaan fungsi ini aktual hanyalah jenis baris, yaitu, jenis input dari baris data. Berbeda dengan fungsi konversi di atas, nilai pengembalian metode panggilan ini harus diperbaiki sebagai boolean.
Kemudian metode panggilan
Javardd <labeledpoint> rdd = oridata.tojavardd (). Filter (boolfilter);
3. Maptopaire
Metode ini agak mirip dengan metode MAP, dan juga melakukan beberapa konversi ke data. Namun, output dari fungsi ini adalah garis input tuple. Metode yang paling umum digunakan adalah melakukan silang-validasi atau perhitungan penarikan tingkat kesalahan statistik AUC, dll.
Demikian pula, Anda perlu mendefinisikan fungsi konversi terlebih dahulu
Function <String, Boolean> Transformer = PairFunction baru <LabeledPoint, Object, Object> () {// LabeledPoint adalah dua objek setelah jenis input. Jangan ubah @Override public tuple2 call (baris labeledpoint) melempar Exception {// Tulis ulang metode panggilan biasanya hanya mengubah parameter dan output input. Jangan ubah prediktor ganda = thismodel.predict (row.features ()); label ganda = row.label (); mengembalikan tuple2 baru (predikton, label); }});Mengenai objek kelas panggilan dan kelas, persyaratan konsisten dengan yang sebelumnya. Kelas perlu diserialisasi, dan objek kelas perlu dinyatakan sebagai tipe akhir
Panggilan yang sesuai adalah sebagai berikut:
Javapairrdd <object, object> predictionsAndLabels = oridata.maptOpair (transformer);
Kemudian, untuk penggunaan prediksi dan label, menghitung akurasi, penarikan, akurasi, dan AUC. Akan ada di blog berikutnya. Mohon tetap disini.
Meringkaskan
Di atas adalah seluruh konten artikel ini. Saya berharap konten artikel ini memiliki nilai referensi tertentu untuk studi atau pekerjaan semua orang. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi. Terima kasih atas dukungan Anda ke wulin.com.