大資料實戰:基於Spark SQL統計分析函式求分組TopN
阿新 • • 發佈:2019-01-10
做大資料分析時,經常遇到求分組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執行結果