首頁 >資料庫 >mysql教程 >如何在 Spark DataFrames 中有效率地執行分組 Top-N 聚合?

如何在 Spark DataFrames 中有效率地執行分組 Top-N 聚合?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-20 13:36:11978瀏覽

How to Efficiently Perform Grouped Top-N Aggregation in Spark DataFrames?

如何使用Spark DataFrame 執行分組TopN 聚合

在Spark SQL 中,您可以利用類似SQLSQL 的語法來執行複雜的資料運算。一項常見任務是將資料分組並從每組中檢索前 N 個值。以下是使用Spark DataFrame 實現此目的的方法:

要按特定列對資料進行分組,請在GROUP BY 子句中指定列名稱:

<br>df 。 groupBy("user")<br>

要對每個群組中的結果進行排序,您可以使用orderBy 函數:

<br>df. groupBy("user").orderBy(desc(" rating"))<br>

這將按每個使用者群組的評分列的降序對資料進行排序。

只擷取來自的前N 筆記錄每個群組,您可以使用limit 函數:

<br>df.groupBy("user").orderBy(desc (" rating")).limit(n)<br><p>其中 n是要檢索的前幾筆記錄的所需數量。 </p><p>或者,您可以使用視窗函數對每個組內的記錄進行排名,然後根據排名進行過濾:</p><p></p><pre class="brush:php;toolbar:false"><br>import org.apache.spark.sql. expressions.Window<br>import org. apache.spark.sql.functions.{rank, desc}<p>// 視窗定義<br>val w = Window.partitionBy($"user").orderBy(desc(" rating"))</p><p>//過濾器<br> df.withColumn("rank",rank.over(w)).where($ "rank" </p>

注意,如果你不關心平局,你可以替換排名函數與 row_number 函數。

以上是如何在 Spark DataFrames 中有效率地執行分組 Top-N 聚合?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn