Hive实现数据抽样的常用三种方法

背景

在大规模数据量的数据分析及建模任务中,往往针对全量数据进行挖掘分析时会十分耗时和占用集群资源,因此一般情况下只需要抽取一小部分数据进行分析及建模操作。
Hive提供了数据取样(SAMPLING)的功能,能够根据一定的规则进行数据抽样,目前支持数据块抽样,分桶抽样和随机抽样,具体如下所示:

1、随机抽样(rand()函数)

(1)使用rand()函数进行随机抽样,limit关键字限制抽样返回的数据,其中rand函数前的distribute和sort关键字可以保证数据在mapper和reducer阶段是随机分布的
 例子:随机取表app.table_name并且日期是当天(datekey='2018-11-14')100条数据
 select * from app.table_name where datekey='2018-11-14' distribute by rand() sort by rand() limit 100;  

(2)千万级数据中进行随机抽样 order by方式耗时更长
 例子:随机取表100条数据
 select * from app.table_name order by rand() limit 100;
 
2、数据块抽样(tablesample()函数) 
1) tablesample(n percent) 根据hive表数据的大小按比例抽取数据,并保存到新的hive表中。如:抽取原hive表中10%的数据 
(注意:测试过程中发现,select语句不能带where条件且不支持子查询,可通过新建

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值