标签: apache-spark group-by apache-spark-sql top-n
如何在spark-sql中获得每组的前n名(比如前10名或前3名)?
spark-sql
http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/提供了一般SQL的教程。但是,spark不会在where子句中实现子查询。
答案 0 :(得分:6)
您可以使用Spark 1.4中添加的窗口功能 假设我们有一个productRevenue表,如下所示。
每个类别中最畅销和第二畅销产品的答案如下
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会给你想要的结果