hive udf 分组取top1_Hive中分组取前N个值的实现-row_number()

背景

假设有一个学生各门课的成绩的表单,应用hive取出每科成绩前100名的学生成绩。

这个就是典型在分组取Top N的需求。

解决思路

对于取出每科成绩前100名的学生成绩,针对学生成绩表,根据学科,成绩做order

by排序,然后对排序后的成绩,执行自定义函数row_number(),必须带一个或者多个列参数,如ROW_NUMBER(col1,

....),它的作用是按指定的列进行分组生成行序列。在ROW_NUMBER(a,b)

时,若两条记录的a,b列相同,则行序列+1,否则重新计数。

只要返回row_number()返回值小于100的的成绩记录,就可以返回每个单科成绩前一百的学生

Sql代码  

create table score_table (

subject string,

student string,

score int

)

partitioned by (date string);

如果要查询2012年每科成绩前100的学生成绩,sql如下

Java代码  

create temporary function row_number as 'com.blue.hive.udf.RowNumber';

select subject,score,student from

(select subject,score,student from score where dt='2012' order by subject,socre desc) order_score

where row_number(subject) <= 100;

com.blue.hive.udf.RowNumber是自定义函数,函数的作用是按指定的列进行分组生成行序列。这里根据每个科目的所有成绩,生成序列,序列值从1开始自增。

执行row_number函数,返回值如下

科目 成绩 学生 row_number

物理 100 张一 1

物理 90 张二 2

物理 80 张三 3

.....

数学 100 李一 1

数学 90 李二 2

数学 80 李三 3

....

row_number的源码

函数row_number(),必须带一个或者多个列参数,如ROW_NUMBER(col1,

....),它的作用是按指定的列进行分组生成行序列。在ROW_NUMBER(a,b)

时,若两条记录的a,b列相同,则行序列+1,否则重新计数。

package com.blue.hive.udf;

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

public class RowNumber extends UDF {

private static int MAX_VALUE = 50;

private static String comparedColumn[] = new String[MAX_VALUE];

private static int rowNum = 1;

public int evaluate(Object... args) {

String columnValue[] = new String[args.length];

for (int i = 0; i < args.length; i++) 『

columnValue[i] = args[i].toString();

}

if (rowNum == 1) {

for (int i = 0; i < columnValue.length; i++)

comparedColumn[i] = columnValue[i];

}

for (int i = 0; i < columnValue.length; i++) {

if (!comparedColumn[i].equals(columnValue[i])) {

for (int j = 0; j < columnValue.length; j++) {

comparedColumn[j] = columnValue[j];

}

rowNum = 1;

return rowNum++;

}

}

return rowNum++;

}

}

编译后,打包成一个jar包,如/usr/local/hive/udf/blueudf.jar

然后在hive shell下使用,如下:

add jar /usr/local/hive/udf/blueudf.jar;

create temporary function row_number as 'com.blue.hive.udf.RowNumber';

select subject,score,student from

(select subject,score,student from score where dt='2012' order by subject,socre desc) order_score

where row_number(subject) <= 100;

同样,这个函数可以用作去重操作。

可以替代大批量数据的DISTINCT

通过执行如:

select * from(

select type,value,row_number() as rn

from

log_table distribute by type,value

sort by type,value

)

where rn = 1;

===============注意!============================

但是使用row_number()函数需要注意一点,必须使用sort

by。

测试的时候必须使用order by。

row_number()函数会假设数据有序的基础上进行的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505636.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线性规划图解法求最优解_高中数学:简单的线性规划问题

1. 简单线性规划问题的有关概念先来看一道高考题&#xff1a;某公司招收男职员x名&#xff0c;女职员y名&#xff0c;x和y须满足约束条件&#xff0c;则的最大值是( )A. 80 B. 85 C. 90 D. 95(1)约束条件&#xff1a;变量x、y满足的一组条件&#xff0c;如上面高考题中的二元一…

在桌面关闭计算机关机不了怎么办,为什么我电脑按关机屏幕一直显示正在关机却一直关不了机怎么办...

“开始”-->“运行”-->键入“Regedit”-->“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\control\Shutdown子项&#xff0c;在右边窗口中新建一个"字符串值"&#xff0c;命名为"FastReboot",同时将"数值数据"设为0即可。如果还不行再…

go struct 静态函数_Go语言学习笔记(四)结构体struct 接口Interface 反射reflect...

加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号&#xff1a;96933959结构体structstruct 用来自定义复杂数据结构&#xff0c;可以包含多个字段(属性)&#xff0c;可以嵌套&#xff1b;go中的struct类型理解为类&#xff0c;可以定义方法&#xff0c;和函数定义有些许区…

html彩色背景指令,HTML_第四章 颜色背景的CSS,本 章 C S S 的 主 - phpStudy...

第四章 颜色背景的&#xff23;&#xff33;&#xff33;本 章 &#xff23; &#xff33; &#xff33; 的 主 要 作 用在前面的章节介绍完了声明与应用的方法及 一些特性之後&#xff0c;从这章开始&#xff0c;便要正式进入&#xff23;&#xff33;&#xff33;的…

arcgis xml 下载 切片_xml格式文件如何用arcgis进行编辑和更新

展开全部为了让你的解析器能够明白这些62616964757a686964616fe59b9ee7ad9431333335343339字符&#xff0c;你必须在XML文档中统一的字符编码标准。--------------------------------------------------------------------------------Windows 95/98 记事本Windows 95/98 记事本…

计算机c盘用户,windows 7 c盘的用户文件夹users如何转移

在这儿逛的朋友一看转移系统文件夹&#xff0c;肯定想到了Windows7优化大师或者魔方&#xff0c;通过他们可以轻松的转移“收藏夹”、“我的文档”等等系统文件夹。但是&#xff0c;如果要把 c:users 这个文件夹彻底转移怎么办呢?Windows7的用户文件夹默认所在位置是系统盘(通…

spark-sql建表语句限制_SparkSQL

SparkSQL介绍Hive是Shark的前身&#xff0c;Shark是SparkSQL的前身,SparkSQL产生的根本原因是其完全脱离了Hive的限制。SparkSQL支持查询原生的RDD。 RDD是Spark平台的核心概念&#xff0c;是Spark能够高效的处理大数据的各种场景的基础。能够在scala中写SQL语句。支持简单的SQ…

docker harbor 域名_docker registry harbor

部署 harbor安装方式&#xff1a; offline软件安装需求&#xff1a;docker 1.10.0 and docker-compose 1.6.0docker 我们选用官方的 repo , yum install docker-ce -ydocker-compose , yum install python-pip,pip install docker-compose下载 Harbor离线安装包&#xff1a; ht…

groupwise_GroupWise部分文档翻译

最近用到了GroupWise,BaiDu了一下,基本没有中文资料,所以只有看英文文档,顺便把看到的东西记录下来,以备以后使用.*****PostOffice的信息存储1.PostOffice数据库PostOffice数据库(wphost.db)包括了所有PostOffice管理的信息,包括PostOffice地址薄(Address Book)的Copy,在GW系统…

苏州大学计算机学院报录比,【图片】18年苏州大学计算机872考研经验分享【苏州大学研究生吧】_百度贴吧...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼二、面试苏大的面试环节个人感觉就很水了。面试一共300′&#xff0c;但是大多数人五分钟就完事了&#xff0c;所以不大会有什么差距&#xff0c;除非你很优秀或者是什么都答不上来。苏大的面试是分组的&#xff0c;具体分到什么组…

计算机大作业论文意义,大学的大作业是什么?

原标题&#xff1a;大学的大作业是什么&#xff1f;大学里面的大作业一般就是课程设计之类的&#xff0c;一些老师会让学生做些课外实践的作业&#xff0c;作为平时成绩的一部分大作业听起来很高大上&#xff0c;然而好多课程其实只是一篇论文。论文类的就是有点水的了。毕竟学…

arduino智能浇花系统_arduino+水泵+继电器+RFID

arduino继电器电机应用场合&#xff1a;加湿器、自动浇花、智能门锁、报警系统.......总之很多场合都适用。本章就介绍利用RFID卡输入&#xff0c;驱动水泵。/* * ---------------------------------------------------------------------------------------------------------…

改革以来计算机应用发展总结,计算机应用基础总结论文

高等教育教学改革不仅仅只是对知识的更新,对教学方法的改进,课程的考试模式改革也是非常重要的。下面是学习啦小编为大家整理的计算机应用基础总结论文&#xff0c;供大家参考。计算机应用基础总结论文范文一&#xff1a;计算机应用基础课程教学改革分析摘要&#xff1a;计算机…

7段均衡器最佳调节图_超高级的吉他均衡器 更细腻的控制 你值得拥有

BOSS DD-200吉他均衡器最近 BOSS推出了一款全新的吉他均衡效果器&#xff0c;为了追求更细腻的控制&#xff0c;这一次的更新&#xff0c;EQ200 可以说做出了不少的颠覆性改进。面板上很直观的看到&#xff0c;EQ的推子增加到了10段&#xff0c;外加一个总音量&#xff0c;对于…

金华职业技术学院计算机应用技术分数线,金华职业技术学院录取分数线2021是多少分(附历年录取分数线)...

金华职业技术学院录取分数线2020是多少分&#xff0c;各专业录取分数线是多少&#xff0c;是每个填报金华职业技术学院的考生最关注的问题&#xff0c;随着各省高考录取批次相继公布&#xff0c;考生也开始关心是否被录取&#xff0c;本站小编整理相关信息供参考&#xff0c;仅…

京瓷m5021cdn如何设置扫描_京瓷产品让您轻松应对潮湿天气

随着即将到来的四月&#xff0c;中国南方大部分地区也将伴随着雨季的到来。这也意味着很多复印件、打印机将会收到潮湿天气的影响&#xff0c;更容易出现卡纸、图像模糊等一系列问题。而京瓷公司最新推出的“黑金刚”系列增加了特有的感光鼓加热功能&#xff0c;有效减少机器受…

矩阵键盘简易计算机设计报告,矩阵键盘显设计报告..doc

摘要在日常生活中&#xff0c;我们经常要用到键盘来实现对电子装置的控制。小到手表手机&#xff0c;中到电视电脑&#xff0c;大到各种复杂仪器&#xff0c;都需要通过各种按键来实现各种操作。本次课程设计以按键控制显示为主题&#xff0c;以MSP430G2553单片机及其接口芯片为…

server sql 去 反斜杠_%00截断配合反序列化的奇妙利用

文章来源&#xff1a;安全客原文链接&#xff1a;%00截断配合反序列化的奇妙利用 - 安全客&#xff0c;安全资讯平台前言前段时间做了一个CTF题目&#xff0c;发现这道题目相当的精妙&#xff0c;主要是利用了%00的截断来绕过安全校验&#xff0c;最终利用反序列化达成目的。漏…

计算机内码和国际码的转换,汉字机内码、国标码和区位码之间转换关系图

《汉字机内码、国标码和区位码之间转换关系图》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《汉字机内码、国标码和区位码之间转换关系图(1页珍藏版)》请在人人文库网上搜索。1、区位码区位码 (4 4位十进制位十进制) 国标码国标码 (十六进制十六进制) 机内码机内码 …

刷卡提示57能恢复吗_硬盘格式化之后数据还能恢复吗?

硬盘格式化之后数据还能恢复吗? 移动硬盘是工作生活中常用的一种存储介质&#xff0c;如果在其中存储了重要的数据&#xff0c;但是却因为中了病毒、人为删除或者不小心误删除文件或是格式化等而导致数据丢失该怎么办&#xff1f;移动硬盘数据可以恢复吗&#xff1f;如何进行移…