1. 程式人生 > >大資料實戰:基於Spark SQL統計分析函式求分組TopN

大資料實戰:基於Spark SQL統計分析函式求分組TopN

做大資料分析時,經常遇到求分組TopN的問題,如:求每一學科成績前5的學生;求今日頭條各個領域指數Top 30%的頭條號等等。Spark SQL提供了四個排名相關的統計分析函式:

dense_rank() 返回分割槽內每一行的排名,排名是連續的。

rank() 返回分割槽內每一行的排名,排名可能不連續。

percent_rank() 返回相對百分比排名。

row_number() 返回每個分割槽的從1開始的連續行號。

排名函式使用例子

假如有一個表Affairs,共有25行資料。資料如下表:

Affairs表資料

在這個表上分別使用這四個函式,通過結果可以很明顯看出他們的異同。

Spark SQL 排名函式使用例子

Spark SQL 排名函式執行結果

常見問題實戰

1. 分別查詢男女中年齡由大到小排名前3的人(排名不連續,人數可能大於3)

rank函式使用例子

rank函式執行結果

2. 分別查詢男女中年齡由大到小排名前3的人(排名連續,人數可能大於3)

dense_rank使用例子

dense_rank執行結果

3. 分別查詢男女中年齡最小的3個人(人數一定為3)

row_number使用例子

row_number執行結果