Pengenalan:
Spark DataFrame menyediakan ciri berkuasa untuk memanipulasi dan mengagregatkan data. Mengumpulkan data berdasarkan lajur tertentu dan kemudian melaksanakan operasi dalam setiap kumpulan, seperti mencari nilai N teratas, adalah keperluan biasa dalam pemprosesan data.
Pernyataan Masalah:
Pertimbangkan Cetuskan DataFrame dengan lajur seperti pengguna, item dan penilaian. Tugasnya adalah untuk mengumpulkan data mengikut pengguna dan mengembalikan item N teratas daripada setiap kumpulan, dengan N ialah nombor yang dipratentukan.
Penyelesaian:
Menggunakan Fungsi Tetingkap:
Scala kod:
import org.apache.spark.sql.expressions.Window import org.apache.spark.sql.functions.{rank, desc} val n: Int = ??? // Window definition val w = Window.partitionBy($"user").orderBy(desc("rating")) // Filter df.withColumn("rank", rank.over(w)).where($"rank" <= n)
Penjelasan:
Kod ini menggunakan fungsi tetingkap untuk meletakkan kedudukan item dalam setiap kumpulan pengguna berdasarkan lajur penilaian dalam tertib menurun. Fungsi pangkat memberikan pangkat kepada setiap baris dalam partition, menunjukkan kedudukannya dalam senarai disusun. Dengan menapis pada kedudukan <= n, hanya N item teratas daripada setiap kumpulan dikekalkan.
Menggunakan row_number Fungsi:
Jika anda tidak perlu mengendalikan ikatan (kes di mana berbilang item mempunyai pangkat yang sama), anda boleh menggunakan row_number dan bukannya pangkat. Kod ini kekal sama seperti di atas, dengan row_number.over(w) menggantikan rank.over(w) dalam ungkapan withColumn.
Dengan memanfaatkan teknik pengumpulan dan windowing ini, anda boleh mencari N item teratas dengan cekap dalam setiap kumpulan dalam Spark DataFrame anda, membolehkan anda mengekstrak cerapan berharga daripada data anda dengan berkesan.
Atas ialah kandungan terperinci Bagaimana untuk Cekap Mencari Item N Teratas setiap Kumpulan dalam Spark DataFrame?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!