`
085567
  • 浏览: 219134 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hive中分组取前N个值的实现

    博客分类:
  • hive
 
阅读更多

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

数据如下表:

id      clsno   score

1       c1      20
2       c1      30
3       c1      40
4       c1      50
5       c1      80
11      c1      80
12      c1      60
6       c2      20
7       c2      30
8       c2      40
9       c2      50
10      c2      80
13      c1      90

 

在sql中可以实现的方式是:SELECT * FROM table AS T WHERE ID IN ( SELECT TOP 2 ID FROM table WHERE clsno = T.clsno ORDER BY score DESC )

 

在hive中没有in这个函数,所以需要别的方式实现。

定义一个rank函数:

package com.example.hive.udf;
import org.apache.hadoop.hive.ql.exec.UDF;
	 
public final 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++;
	}
}
 

加入$HIVE_HOME/lib/hive-serde-1.7.jar:$HIVE_HOME/lib/hive- exec .jar:$HADOOP_HOME/hadoop-core.jar打成一个jar包Rank.jar

hive>add jar Rank.jar;

hive>create temporary function rank as 'com.example.hive.udf.Rank';

hive>select clsno,rank(clsno),id,score from (select clsno,id,score from byl_topn_test distribute by clsno sort by clsno,score desc)a;

得到结果:

 

取各科成绩中rank值小于2的记录即可。

 

英文原文链接:http://www.findnwrite.com/musings/extract-top-n-records-in-each-group-in-hadoophive/

  • 大小: 12.1 KB
分享到:
评论

相关推荐

    Hive中分组取topN_row_number-rank和dense_rank的使用.pdf

    在这篇文档中,我们将详细学习在Hive中如何进行分组取topN,以及如何使用row_number()、rank()和dense_rank()三种窗口函数进行数据排序和排名。 首先,Hive中的数据表创建和数据插入操作是数据查询和分析的前提。...

    hive 分组取TopN

    hive不直接支持分组取TopN的操作,需要自定义udf函数打成jar包添加到hive运行环境中

    hive udaf 实现按位取与或

    在“hive udaf 实现按位取与或”的场景中,我们主要探讨如何使用UDAF来实现数据的按位逻辑运算,如按位与(AND)和按位或(OR)。 一、Hive UDAF基本概念 UDAF是一种特殊的用户自定义函数,它负责处理一组输入值并...

    部分普通sql查询在hive中的实现方式

    ### 部分普通SQL查询在Hive中的实现方式 Hive是一款基于Hadoop的数据仓库工具,能够对存储在Hadoop文件系统中的数据集进行数据提取、转换、加载(ETL),这是一种可以简化MapReduce编程的工具。由于Hive的设计初衷...

    大数据hive实现原理.zip_hive中怎么更新数据

    桶将数据分组到特定的文件中,而分区则将数据按指定的列值分割到不同的目录下,这样可以更高效地定位和更新数据。 然而,值得注意的是,尽管Hive支持更新数据,但由于其本质的分布式和批处理特性,这类操作相比传统...

    Hive 多行合并和分组limit输出 UDF工具包

    用于多行合并和分组limit输出的udf工具包,已编译配置好,直接调用即可

    Hive中SQL详解

    Hive是一个基于Hadoop构建的数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop分布式文件系统中的数据。 Hive SQL支持绝大多数的语句,如DDL、DML、聚合函数、连接查询、条件查询等。 Hive不适合用于...

    hive所有jar文件

    在Hive中操作HBase,首先需要配置Hive的metastore,指定HBase的Zookeeper节点和表的namespace,然后创建一个外部表,指明表的列族和列,以及对应的HBase表名。一旦设置完成,Hive用户就能像操作普通Hive表一样操作...

    大数据之Hive官方文档简要翻译(中文文档)

    Hive会首先尝试连接列表中的第一个URI,如果失败,则会尝试其他URI。 - `hive.metastore.local`:(从Hive 0.10版本开始废弃)用于指示是否使用本地或远程元存储。如果`hive.metastore.uris`为空,则假设为本地模式...

    Hive函数及语法说明

    这个支持允许用户使用熟悉的 Oracle SQL 语句在 Hive 中执行,提高了工作效率和生产力。 函数说明参考链接 Hive 提供了一个函数说明参考链接,用于查询和了解 Hive 的函数说明。这个链接包括: * SHOW FUNCTIONS;...

    HIVE安装及详解

    HIVE与Hadoop是一种紧密的关系,HIVE可以与Hadoop集成,实现大规模数据的存储和处理。 HIVE与传统数据库对比 HIVE与传统数据库有很多不同之处: * 数据存储:HIVE使用Hadoop分布式文件系统(HDFS)存储数据,而...

    HIVE函数详解大全

    在大数据处理领域,Hive 是一个非常重要的工具,它提供了SQL-like的语言来进行数据查询和分析。本篇文章将详细解析Hive中的各种函数,帮助你更好地理解和应用这些功能。 一、关系运算 关系运算用于比较两个或多个...

    Hive原理与实现

    Hive 是一个构建于 Hadoop 之上的数据仓库工具,它提供了类 SQL 的查询语言(HQL),使得用户可以方便地处理存储在 Hadoop 分布式文件系统(HDFS)中的大规模数据集。Hive 的设计初衷在于降低大数据处理的门槛,让...

    利用Hive进行复杂用户行为大数据分析及优化案例

    02_Hive表批量加载数据的脚本实现(一) 03_Hive表批量加载数据的脚本实现(二) 04_HIve中的case when、cast及unix_timestamp的使用 05_复杂日志分析-需求分析 06_复杂日志分析-需求字段讲解及过滤 07_复杂日志分析...

    hive实现原理

    ### Hive实现原理详解 #### 一、Hive简介与应用场景 Hive 是一款基于 Hadoop 的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类 SQL 查询功能,使 MapReduce 编程更加简单,更具通用性。Hive ...

    hive客户端安装_hive客户端安装_hive_

    在大数据处理领域,Hive是一个非常重要的工具,它提供了一个基于Hadoop的数据仓库基础设施,用于数据查询、分析和管理大规模数据集。本教程将详细讲解如何在Linux环境下安装Hive客户端,以便进行数据操作和分析。 ...

    hive2.1.1中orc格式读取报数组越界错误解决方法

    这两个jar包分别是Hive执行引擎和ORC文件格式处理的实现,更新它们可能是为了修复特定版本中的已知问题或提供更好的兼容性。 CDH(Cloudera Distribution Including Apache Hadoop)是Cloudera公司提供的Hadoop发行...

    hive级联求和

    在统计学和数据分析中,级联求和是指在一组数据中逐级累加特定字段的值,直到得到一个全局的总和。例如,如果我们有一个销售数据表,包含地区、城市、店铺和每日销售额等信息,级联求和可能需要计算每个地区的总销售...

    Hive实现并发

    hive实现并发机制:hive里,同一sql里,会涉及到n个job,默认情况下,每个job是顺序执行的。 如果每个job没有前后依赖关系,可以并发执行的话,可以通过设置该参数 set hive.exec.parallel=true,实现job并发执行...

    DataX数据的迁移(MySQL、HDFS,Hive)

    1.数据迁移的过程中,由于hive的Null值存储为"\N",Mysql存储为NULL值,二者转换时需要注意,再数据迁移json模板中,"nullFormat": "\\N", 该配置信息就是解决了数据迁移是存在的Null值。 2.如果hive中没有数值DataX...

Global site tag (gtag.js) - Google Analytics