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

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

Mary-Kate Olsen
發布: 2024-12-20 13:36:11
原創
1024 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板