hive中分组计算top N.

Posted 华山佃农之大数据

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive中分组计算top N.相关的知识,希望对你有一定的参考价值。

       平时在做数据查询时,有一种需求就是,对数据分组后,我只想看每组数据的前几个值。这个用hive怎么处理呢,总不能每组数据都单独计算,再排序取limit吧。

        幸好hive还有UDF。这可是个大招。

        下面介绍下具体招式:

        1. 编写一个UDF程序。

            import org.apache.hadoop.hive.ql.exec.UDF;

            public class Rank extends UDF {

          private int  counter;

private String last_key;
public int evaluate(final String key) {
if ( !key.equalsIgnoreCase(this.last_key)) {
this.counter = 0;
this.last_key = key;
}
return this.counter++;
}
}
看到此处迷糊不❓看我加点注释:当udf的evaluate方法接收到hive传进来的一个字段的值时,
会用这个值跟上一个值对比,如果一致那么将计数器counter加一,不一致,就将counter置为0。
简单吧。
2. hql语句中的应用
举个

以上是关于hive中分组计算top N.的主要内容,如果未能解决你的问题,请参考以下文章

hive 和 mysql 求解分组 top n

hive 和 mysql 求解分组 top n

Hive窗口函数

Spark 两种方法计算分组取Top N

按 Hive 中的列分组

sql计算前top n%的数据