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.的主要内容,如果未能解决你的问题,请参考以下文章