每组Spark sql top n

Geo*_*ler 7 group-by top-n apache-spark apache-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子句中实现子查询.

tya*_*agi 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
Run Code Online (Sandbox Code Playgroud)

Tis会给你想要的结果

  • 解决方案是:http://stackoverflow.com/questions/31786912/spark-failure-union-expected-but-found (2认同)