Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Melaksanakan Pengagregatan Top-N Berkumpulan dengan Cekap dalam Spark DataFrames?

Bagaimana untuk Melaksanakan Pengagregatan Top-N Berkumpulan dengan Cekap dalam Spark DataFrames?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-20 13:36:11976semak imbas

How to Efficiently Perform Grouped Top-N Aggregation in 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn