hive rank 测试
来源:互联网 发布:知名法学院 知乎 编辑:程序博客网 时间:2024/06/07 02:03
前言
最近在做数据的去重,想到一种类似于关系型数据库rank函数的方式,即获取topN(N=1)的方式,sql步骤如下:
1.数据分组,组内排序
2.对分组数据进行标记rank
3.获取rank<N的数据
hive udf
hive中没有这种函数,需要自己编写udf函数,代码如下:
小函数据量测试
结果:
可以看到数据是准确的。
大数据来量测试
数据总量:5033768
重复数据:2516884,即一半是重复数据
结果:
4194632
可以看到数据量是不对的。
原因
大数据量时,rank方式去重数据结果不准确的原因还未确定,推测原因是:
distribute sort后相同数据被分在不同数据块中,在接下来sql读取的时候,相同数据没有被读进同一个rank函数。
最近在做数据的去重,想到一种类似于关系型数据库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;OKa1a4a6b87b3b100c10d90d9a3a3
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
结果:
d900a60b870c100
可以看到数据是准确的。
大数据来量测试
数据总量:5033768
重复数据:2516884,即一半是重复数据
结果:
4194632
可以看到数据量是不对的。
原因
大数据量时,rank方式去重数据结果不准确的原因还未确定,推测原因是:
distribute sort后相同数据被分在不同数据块中,在接下来sql读取的时候,相同数据没有被读进同一个rank函数。
0 0
- hive rank 测试
- Hive ROW_NUMBER,RANK(),DENSE_RANK()
- Hive ROW_NUMBER,RANK(),DENSE_RANK()
- Hive ROW_NUMBER,RANK(),DENSE_RANK()
- hive使用rank实现topN的查询
- Hive 分区排序 rank dense_rank row_number
- hive函数--排序row_number,rank over
- [Hive]分析函数 RANK ROW_NUMBER CUME_DIST CUME_DIST
- 测试hive
- HIVE分析窗口函数:NTILE,ROW_NUMBER,RANK,DENSE_RANK
- Hive分析窗口函数(二) NTILE,ROW_NUMBER,RANK,DENSE_RANK
- Hive分析窗口函数(二) NTILE,ROW_NUMBER,RANK,DENSE_RANK
- Hive分析窗口函数之NTILE,ROW_NUMBER,RANK和DENSE_RANK
- Hive分析窗口函数(二) NTILE,ROW_NUMBER,RANK,DENSE_RANK
- Hive分析窗口函数(二) NTILE,ROW_NUMBER,RANK,DENSE_RANK
- Hive分析窗口函数(二) NTILE,ROW_NUMBER,RANK,DENSE_RANK
- Hive窗口和分析函数[RANK()、DENSE_RANK()、ROW_NUMBER()]
- HIVE rank() over (partition by xx order by xx)
- Vue.js学习 Item16 – 实现一个自定义分页组件vue-paginaiton
- sqoop hbase导入并与hive结合
- Java 在数据库中生成一年的假日与工作日信息
- delphi中文数字转阿拉伯数字
- 提供两个可以免费测试使用的问service接口
- hive rank 测试
- ACM--三角形重心--HDOJ 2105--The Center of Gravity--水
- java.lang.ClassNotFoundException: org.apache.hadoop.hive.hbase.HBaseSplit
- hive结合hbase数据处理解决方案测评
- 2.MVC5 增加一个控制器
- python hbase
- Java技术——Java中的内存泄漏
- 简单试了下vuforia的video play
- cocos2d 物理平抛,斜抛运动