Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Melaksanakan Pengagregatan Top-N Berkumpulan dengan Cekap dalam Spark DataFrames?
Cara Melaksanakan Pengagregatan Teratas Berkumpulan Menggunakan Spark DataFrame
Dalam Spark SQL, anda boleh memanfaatkan sintaks seperti SQL untuk melaksanakan manipulasi data yang kompleks. Satu tugas biasa ialah mengumpulkan data dan mendapatkan nilai N teratas daripada setiap kumpulan. Begini cara anda boleh mencapai ini menggunakan Spark DataFrame:
Untuk mengumpulkan data mengikut lajur tertentu, nyatakan nama lajur dalam klausa KUMPULAN MENGIKUT:
<br>df. groupBy("user")<br>
Untuk mengisih keputusan dalam setiap kumpulan, anda boleh menggunakan fungsi orderBy:
<br>df.groupBy("user").orderBy(desc("rating"))<br>
Ini akan mengisih data dalam tertib menurun lajur rating untuk setiap kumpulan pengguna.
Kepada dapatkan hanya rekod N teratas daripada setiap kumpulan, anda boleh menggunakan fungsi had:
df.groupBy("pengguna").orderBy(desc("rating")).had (n)
Di manakah n ialah bilangan rekod teratas yang dikehendaki untuk dapatkan semula.
Sebagai alternatif, anda boleh menggunakan fungsi tetingkap untuk menyusun rekod dalam setiap kumpulan dan kemudian menapis berdasarkan kedudukan:
<br>import org.apache.spark. sql.expressions.Window<br>import org.apache.spark.sql.functions.{rank, desc}</p> <p>// Takrif tetingkap<br>val w = Window.partitionBy($"user").orderBy(desc("rating"))</p> <p>// Penapis<br>df .withColumn("rank", rank.over(w)).where($"rank" <= n)<br>
Perhatikan bahawa jika anda tidak mengambil berat tentang ikatan, anda boleh menggantikan fungsi pangkat dengan fungsi row_number.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pengagregatan Top-N Berkumpulan dengan Cekap dalam Spark DataFrames?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!