Spark RDD Equivalent of SQL Row_Number for Partitioned Data
Dalam SQL, row_number() menjana nombor berjujukan untuk baris dalam set data terbahagi. Ciri ini tidak tersedia secara langsung dalam Spark RDD. Walau bagaimanapun, terdapat penyelesaian untuk mencapai kefungsian yang serupa.
Pembahagian RDD
Pembahagian adalah penting untuk menjana nombor baris dalam kumpulan. Dalam kes anda, anda perlu membahagikan RDD dengan key_value (K) sebelum mengisih. Pertimbangkan kod yang dikemas kini:
val temp2 = temp1 .map(x => (x._1, (x._2, x._3, x._4))) .sortBy(a => (a._1, -a._2._2, -a._2._3)) .zipWithIndex .map(a => (a._1._1, a._1._2._1, a._1._2._2, a._1._2._3, a._2 + 1))
Dengan menggunakan sortBy to (a._1, -a._2._2, -a._2._3), anda mengisih berdasarkan key_value, kemudian menuruni col2, dan akhirnya menurunkan col3, meniru tingkah laku SQL row_number().
Menambah Baris Nombor
Selepas membahagi dan mengisih, anda boleh menambah nombor baris menggunakan zipWithIndex:
val rowNums = temp2.map(a => (a._1, a._2, a._3, a._4, a._5)).cache()
Nota: Pelaksanaan DataFrame yang Disediakan dalam Respons Adalah Penyelesaian untuk DataFrames, tetapi Bukan untuk RDD.
Atas ialah kandungan terperinci Bagaimana untuk Meniru Fungsi row_number() SQL dengan Spark RDDs untuk Data Terbahagi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!