`
lookqlp
  • 浏览: 346284 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

hive rank 测试

    博客分类:
  • hive
阅读更多
前言
最近在做数据的去重,想到一种类似于关系型数据库rank函数的方式,即获取topN(N=1)的方式,sql步骤如下:
1.数据分组,组内排序
2.对分组数据进行标记rank
3.获取rank<N的数据
hive udf
hive中没有这种函数,需要自己编写udf函数,代码如下:
public final class TradeUDF extends UDF {
	private int counter;
	private String last_dp_id;
	private String last_tid;
	//多参数
	public int evaluate(String dp_id, String tid) {
		if (dp_id.equalsIgnoreCase(this.last_dp_id) && tid.equalsIgnoreCase(this.last_tid)) {
			this.counter++;
		}else{
			this.counter = 0;
			this.last_dp_id = dp_id;
			this.last_tid = tid;
		}
		return this.counter;
	}
	//一个参数
	public int evaluate(final String tid) {
		if (!tid.equals(this.last_tid)) {
			this.counter = 0;
			this.last_tid = tid;
		}
		return this.counter++;
	}
}

小函数据量测试
select * from test2;
OK
a	1
a	4
a	6
b	87
b	3
b	100
c	10
d	90
d	9
a	3
a	3

SELECT a,b,rank
   FROM (SELECT a,b,rank(a) rank
                  FROM (SELECT a,b
                              FROM test2 DISTRIBUTE BY a SORT BY b desc
                            )  t1) 
              t2
   WHERE rank <1

结果:
d	90	0
a	6	0
b	87	0
c	10	0

可以看到数据是准确的。
大数据来量测试
数据总量:5033768
重复数据:2516884,即一半是重复数据
结果:
4194632
可以看到数据量是不对的。
原因
大数据量时,rank方式去重数据结果不准确的原因还未确定,推测原因是:
distribute sort后相同数据被分在不同数据块中,在接下来sql读取的时候,相同数据没有被读进同一个rank函数。
分享到:
评论

相关推荐

    Hive开窗函数测试-cube,rollup

    在Hive中,窗口函数包括`row_number()`, `rank()`, `dense_rank()`, `percent_rank()`, `ntile()`, `lag()`, `lead()`等,它们对于排序数据、分组计算以及追踪行之间的关系特别有用。例如,`lag()`可以用来查看当前...

    Hive实战模拟电商数据

    6. **窗口函数**:对于时间序列分析,Hive的窗口函数(如ROW_NUMBER、LAG、LEAD、RANK等)能帮助我们计算每个用户最近一次购买、销售额趋势等。 7. **数据分桶与采样**:通过`CLUSTER BY`和`DISTRIBUTE BY`,可以将...

    mytest.zip

    HSQL(HyperSQL)是一种轻量级的关系型数据库管理系统,常用于测试和开发应用程序。本文将深入探讨如何使用HSQL,特别是针对“mytest.zip”这个压缩包中的数据进行实践操作,以及如何结合开窗函数来提升数据分析能力...

    图像融合TIF算法Python和MATLAB版本代码

    总结一下,这个资源涵盖了图像融合领域的TIF算法,提供了Python3.8(使用OpenCV库)和MATLAB的实现代码,以及用于测试的图像数据。无论你是初学者还是经验丰富的开发者,都可以通过这个资源深入学习图像融合技术,并...

    BigDataProject:这是我的大数据类项目

    Hive HA模式搭建(未测试) MongoDB与Pig MongoDB的本地安装 + PyMongo的基本操作 MongoDB的全分布式安装 Pig的全分布式安装 数据集介绍 公开数据集 这一部分数据集能够在公开渠道下载。 kaggle - Amazon sales rank...

    spark考试练习题含答案.rar

    3. **Spark SQL的窗口函数**:如row_number(), rank(), dense_rank()等,用于处理分组内的排序和分组间的排名问题。 四、Spark Streaming 1. **DStream(Discretized Stream)**:Spark Streaming中的基本抽象,...

    2021年各大企业大数据技术面试题.docx

    例如,`ROW_NUMBER()`, `RANK()`, `LEAD()`, `LAG()` 等。 2. **Spark的Shuffle过程**:Shuffle是Spark作业中的重要阶段,它发生在MapReduce模型的Reduce阶段,用于重新分配数据,确保相同键的数据被送到同一个...

    实验手册:搜狗搜索日志分析系统实现-Hadoop2.0-v1.2-noted

    接下来,我们将使用Hive构建一个数据仓库,以便更高效地管理和查询数据。 1. **基本操作** 创建Hive数据库和表,定义好数据类型和字段结构,以便于后续查询。 2. **创建分区表** 基于时间字段(如年、月、日、...

    2021年各大企业大数据技术面试题.pdf

    开窗函数如`ROW_NUMBER()`, `RANK()`, `LEAD()`, `LAG()`等在SQL中用于在数据窗口上执行计算,比如计算排名或移动平均。自连接SQL是将一个表与自身进行连接,常用于处理具有层级关系的数据或查找相关记录。 2. **...

    Hadoop数据分析平台学习笔记

    - **Hadoop的技术原理**:Hadoop借鉴了Google的“倒排索引”技术,以及Page-Rank算法来处理大规模数据集。它采用了类似于Google的全文检索功能,能够有效地管理和分析海量数据。 #### 二、Hadoop子项目介绍 Hadoop...

Global site tag (gtag.js) - Google Analytics