大數據實戰:基於Spark SQL統計分析函數求分組TopN
做大數據分析時,經常遇到求分組TopN的問題,如:求每一學科成績前5的學生;求今日頭條各個領域指數Top 30%的頭條號等等。Spark SQL提供了四個排名相關的統計分析函數:
dense_rank() 返回分區內每一行的排名,排名是連續的。
rank() 返回分區內每一行的排名,排名可能不連續。
percent_rank() 返回相對百分比排名。
row_number() 返回每個分區的從1開始的連續行號。
假如有一個表Affairs,共有25行數據。數據如下表:
在這個表上分別使用這四個函數,通過結果可以很明顯看出他們的異同。
常見問題實戰1. 分別查找男女中年齡由大到小排名前3的人(排名不連續,人數可能大於3)
2. 分別查找男女中年齡由大到小排名前3的人(排名連續,人數可能大於3)
3. 分別查找男女中年齡最小的3個人(人數一定爲3)