Hive实现数据抽样的三种方法
来源:互联网 发布:此何遽不为福乎的为 编辑:程序博客网 时间:2024/05/21 17:43
在大规模数据量的数据分析及建模任务中,往往针对全量数据进行挖掘分析时会十分耗时和占用集群资源,因此一般情况下只需要抽取一小部分数据进行分析及建模操作。Hive提供了数据取样(SAMPLING)的功能,能够根据一定的规则进行数据抽样,目前支持数据块抽样,分桶抽样和随机抽样,具体如下所示:
数据块抽样(tablesample()函数)
1) tablesample(n percent) 根据hive表数据的大小按比例抽取数据,并保存到新的hive表中。如:抽取原hive表中10%的数据
(注意:测试过程中发现,select语句不能带where条件且不支持子查询,可通过新建中间表或使用随机抽样解决)
create table xxx_new as select * from xxx tablesample(10 percent)
2)tablesample(n M) 指定抽样数据的大小,单位为M。
3)tablesample(n rows) 指定抽样数据的行数,其中n代表每个map任务均取n行数据,map数量可通过hive表的简单查询语句确认(关键词:number of mappers: x)分桶抽样
hive中分桶其实就是根据某一个字段Hash取模,放入指定数据的桶中,比如将表table_1按照ID分成100个桶,其算法是hash(id) % 100,这样,hash(id) % 100 = 0的数据被放到第一个桶中,hash(id) % 100 = 1的记录被放到第二个桶中。创建分桶表的关键语句为:CLUSTER BY语句。
分桶抽样语法:
TABLESAMPLE (BUCKET x OUT OF y [ON colname])
其中x是要抽样的桶编号,桶编号从1开始,colname表示抽样的列,y表示桶的数量。
例如:将表随机分成10组,抽取其中的第一个桶的数据
select * from table_01 tablesample(bucket 1 out of 10 on rand())- 随机抽样(rand()函数)
1)使用rand()函数进行随机抽样,limit关键字限制抽样返回的数据,其中rand函数前的distribute和sort关键字可以保证数据在mapper和reducer阶段是随机分布的,案例如下:
select * from table_name where col=xxx distribute by rand() sort by rand() limit num;
2)使用order 关键词
案例如下:
select * from table_name where col=xxx order by rand() limit num;
经测试对比,千万级数据中进行随机抽样 order by方式耗时更长,大约多30秒左右。
参考资料:http://www.bubuko.com/infodetail-1022686.html
- Hive实现数据抽样的三种方法
- python实现的四种抽样方法
- Hive 数据抽样
- Hive实现大数据集有放回抽样(方法一)
- Hive实现从表中随机抽样得到一个不重复的数据样本
- Hive实现从表中随机抽样得到一个不重复的数据样本
- Hive实现从表中随机抽样得到一个不重复的数据样本
- Hive实现从表中随机抽样得到一个不重复的数据样本
- Hive进行数据抽样-Sampling
- 淳朴的大数据抽样方法
- R语言--数据抽样的实现
- Hive设置参数的三种方法
- Hive设置参数的三种方法
- 常用的抽样方法
- 常用的抽样方法
- 利用ORACLE实现数据抽样
- 处理非均衡问题的数据抽样方法
- hive 数据导入的四种方法
- swift 不能加载网络图片
- AlertDialog中默认按键不关闭对话框功能的实现
- 1-3 table表格及其中属性
- Android5.0 显示系统(三)————Surface的创建
- 程序 进程 线程 的区别和联系
- Hive实现数据抽样的三种方法
- 第三章垃圾收集器和内存分配策略
- 指针入门
- 简单的netfilter hook函数注册以及内核链表的使用
- 51 nod 1043 幸运号码(数位DP)
- win10VirtualBox没有64位选项
- 回文质数
- hello,word 这是我开通博客的第一天
- 对拍教程-By skyler2003