先自定义一个UDAF,由于udaf是多输入一条输出的聚合,所以结果拼成字符串输出,代码如下:
public class Top4GroupBy extends UDAF {
//定义一个对象用于存储数据
public static class State {
private Map<Text, IntWritable> counts;
private int limit;
}
/**
* 累加数据,判断map的key中是否存在该字符串,如果存在累加,不存在放入map中
* @param s
* @param o
* @param i
*/
private static void increment(State s, Text o, int i) {
if (s.count

这篇博客介绍了如何在Hive中通过自定义UDAF和UDTF实现GROUP BY后获取Top值的功能。首先,自定义了一个名为Top4GroupBy的UDAF,用于统计并返回每个组的前N个最高值,然后通过UDTF ExplodeMap将结果字符串按分隔符切分并转换为多行列表输出。这两个函数可以一起用于获取如landingrefer的前100个top URL。
订阅专栏 解锁全文
1109

被折叠的 条评论
为什么被折叠?



