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

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

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

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

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

排名函數使用例子

假如有一個表Affairs,共有25行數據。數據如下表:

大數據實戰:基於Spark SQL統計分析函數求分組TopN

Affairs表數據

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

大數據實戰:基於Spark SQL統計分析函數求分組TopN

Spark SQL 排名函數使用例子

大數據實戰:基於Spark SQL統計分析函數求分組TopN

Spark SQL 排名函數執行結果

常見問題實戰

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

大數據實戰:基於Spark SQL統計分析函數求分組TopN

rank函數使用例子

大數據實戰:基於Spark SQL統計分析函數求分組TopN

rank函數執行結果

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

大數據實戰:基於Spark SQL統計分析函數求分組TopN

dense_rank使用例子

大數據實戰:基於Spark SQL統計分析函數求分組TopN

dense_rank執行結果

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

大數據實戰:基於Spark SQL統計分析函數求分組TopN

row_number使用例子

大數據實戰:基於Spark SQL統計分析函數求分組TopN

row_number執行結果

查看原文 >>
相關文章