温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Hive实现数据抽样的方法有哪些

发布时间:2021-07-28 09:12:43 来源:亿速云 阅读:497 作者:chen 栏目:大数据

这篇文章主要讲解了“Hive实现数据抽样的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hive实现数据抽样的方法有哪些”吧!

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

1. 数据块抽样(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)

2.分桶抽样
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())

3. 随机抽样(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秒左右。

感谢各位的阅读,以上就是“Hive实现数据抽样的方法有哪些”的内容了,经过本文的学习后,相信大家对Hive实现数据抽样的方法有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI