每组Spark sql top n

时间:2016-04-16 05:48:07

标签: apache-spark group-by apache-spark-sql top-n

如何在spark-sql中获得每组的前n名(比如前10名或前3名)?

http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/提供了一般SQL的教程。但是,spark不会在where子句中实现子查询。

1 个答案:

答案 0 :(得分:6)

您可以使用Spark 1.4中添加的窗口功能 假设我们有一个productRevenue表,如下所示。 enter image description here

每个类别中最畅销和第二畅销产品的答案如下

SELECT product,category,revenue FROM 
   (SELECT product,category,revenue,dense_rank() 
         OVER (PARTITION BY category ORDER BY revenue DESC) as rank 
    FROM productRevenue) tmp 
WHERE rank <= 2

Tis会给你想要的结果