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