Spark sql 每组前 n

Spark sql top n per group

如何在 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子句中实现子查询。

您可以使用 Spark 1.4 中添加的 window 函数特性 假设我们有一个 productRevenue table,如下所示。

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

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

这会给你想要的结果