Dalam SQL, fungsi row_number() memberikan nombor baris unik kepada setiap rekod dalam jadual, dipisahkan oleh set lajur yang diberikan dan dipesan oleh set lain. Meniru fungsi ini untuk Spark RDD boleh dilakukan menggunakan langkah berikut:
1. Cipta SepasangRDD Pasangan Nilai Kunci
Tukarkan RDD tupel (K, V) kepada PasanganRDD bagi (K, (V, 1)) pasangan. Ini akan membolehkan pengisihan digunakan berdasarkan kedua-dua kunci K dan nilai pemegang tempat 1.
2. Isih RDD
Gunakan sortByKey() untuk mengisih PairRDD berdasarkan kekunci K. Ini akan mengumpulkan semua rekod dengan kunci yang sama bersama-sama.
3. Zip Dengan Indeks
Panggil zipWithIndex() pada RDD yang diisih untuk menambah lajur tambahan yang mewakili nombor baris dalam setiap partition kekunci.
4. Gabungkan Kekunci, Nilai dan Nombor Baris
Ekstrak kunci, nilai dan nombor baris daripada PairRDD menggunakan fungsi pemetaan dan gabungkannya ke dalam tuple baharu (K, V, rowNum).
Proses ini membolehkan anda menetapkan nombor baris pada setiap rekod dalam RDD, dengan berkesan mereplikasi kefungsian SQL fungsi row_number() dengan pembahagian.
Contoh:
val temp1 = sc.parallelize(Seq(((3,4),5,5,5),((3,4),5,5,9),((3,4),7,5,5),((1,2),1,2,3),((1,2),1,4,7),((1,2),2,2,3))) val temp2 = temp1 .map(x => (x, 1)) .sortByKey() .zipWithIndex() .map(a => (a._1._1, a._1._2._1, a._1._2._2, a._1._2._3, a._2 + 1)) temp2.collect().foreach(println)
Output:
((1,2),1,2,3,2) ((1,2),1,4,7,1) ((1,2),2,2,3,3) ((3,4),5,5,5,4) ((3,4),5,5,9,5) ((3,4),7,5,5,6)
Atas ialah kandungan terperinci Bagaimana untuk meniru fungsi `row_number()` SQL menggunakan Spark RDD?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!