发布者认证信息(营业执照和身份证)未完善,请登录后完善信息登录
 终于领会Hive进阶―抽样的各种玩法价格|图片 - 客集网
Hi,你好,欢迎来到客集网
  • 产品
  • 求购
  • 公司
  • 展会
  • 招商
  • 资讯
  • 解梦
当前位置: 首页 » 产品 » 二手信息 » 二手家居 » 二手高低床 找商家、找信息优选VIP,安全更可靠!

终于领会Hive进阶―抽样的各种玩法

终于领会Hive进阶―抽样的各种玩法_图片
图片仅供参考,点击图片可查看大图
价格面议 询价 品牌:软件开发有限公司QVT 有效期至:长期有效 浏览次数:44 最后更新:2022-01-09 14:53 电话13988889999 张生先生
先付费或远低于市场价的均可能是骗子,请谨防受骗;举报请联系客服!联系商家时请说在【客集网】上看到的!
信息详情

 

抽样

抽样在Hive 中也是比较常用的一种手段,主要用在下面的几个场景中

一些机器学习的场景中,数仓作为数据的提供方提供样本数据 数据的计算结果异常或者是指标异常,这个时候如果我们往往需要确认数据源的数据是否本身就有异常 SQL的性能有问题的时候我们也会使用抽样的方法区查看数据,然后进行SQL调优 在大规模数据量的数据分析及建模任务中,往往针对全量数据进行挖掘分析时会十分耗时和占用集群资源,因此一般情况下只需要抽取一小部分数据进行分析及建模操作。

随机抽样(rand()函数)

我们一般情况下是使用排序函数和rand() 函数来完成随机抽样,limit关键字限制抽样返回的数据,不同之处再有我们使用哪个排序函数呢

利用 rand() 函数进行抽取,这是因为rand() 返回一个0到1之间double 类型的随机值。

下面我们用到了前面我们使用过的一张表大概 条记录,这里我就不给大家准备数据了,大家可以看Hive进阶之数据存储格式来获取测试数据

create table ods_user_bucket_log(      id int,      name string,      city string,      phone string,      acctime string) CLUSTERED BY (`id` ) INTO 5 BUCKETS  row format delimited fields terminated by ' ' stored as textfile; insert overwrite table ods_user_bucket_log select * from ods_user_log; 

order by rand()

order by只会启用一个reduce所以比较耗时,至于为什么我们在前面的文章中解释过了Hive语法之常见排序方式

因为order by 是全局的,所以可以做到随机抽样的目的

select * from ods_user_bucket_log order by rand() limit 10; 

sort by rand()

sort by 提供了单个 reducer 内的排序功能,但不保证整体有序,这个时候其实不能做到真正的随机的,因为此时的随机是针对分区去的,所以如果我们可以通过控制进入每个分区的数据也是随机的话,那我们就可以做到随机了

select * from ods_user_bucket_log sort by rand() limit 10; 

distribute by rand() sort by rand()

rand函数前的distribute和sort关键字可以保证数据在mapper和reducer阶段是随机分布的,这个时候我们也能做到真正的随机,前面我们也介绍过cluster by 其实基本上是和distribute by sort by 等价的

select * from ods_user_bucket_log distribute by rand() sort by rand() limit 10; 

cluster by rand()

cluster by 的功能是 distribute by 和 sort by 的功能相结合,distribute by rand() sort by rand() 进行了两次随机,cluster by rand() 仅一次随机,所以速度上会比上一种方法快

select * from ods_user_bucket_log cluster by rand() limit 10; 

tablesample()抽样函数

分桶抽样(桶表抽样)

hive中分桶其实就是根据某一个字段Hash取模,放入指定数据的桶中,比如将表table按照ID分成100个桶,其算法是hash(id) % 100,这样,hash(id) % 100 = 0的数据被放到第一个桶中,hash(id) % 100 = 1的记录被放到第二个桶中。

分桶抽样语法:

TABLESAMPLE (BUCKET x OUT OF y [ON colname])

其中x是要抽样的桶编号,桶编号从1开始,colname表示抽样的列(也就是按照那个字段分桶),y表示桶的数量。所以表达的意思是按照colname字段分成y桶,抽取其中的第x桶

SELECt     * FROM     ods_user_bucket_log TABLESAMPLE (BUCKET 1 OUT OF  ON rand()) ; 

数据块抽样

从 Hive 开始提供块抽样,使用 tablesample 抽取指定的 行数/比例/大小

SELECt * FROM ods_user_data TABLESAMPLE(1000 ROWS); SELECt * FROM ods_user_data TABLESAMPLE (20 PERCENT);  SELECt * FROM ods_user_data TABLESAMPLE(1M);  

按比例抽样 ABLESAMPLE (20 PERCENT)

这将允许 Hive 至少获取 n%的数据

SELECt     * FROM     ods_user_bucket_log TABLESAMPLE( PERCENT); 

抽取特定大小的数据TABLESAMPLE(100M)

SELECt     * FROM     ods_user_bucket_log TABLESAMPLE(1M); 

需要注意的是这里必须是整数M ,以为我尝试零点几的时候报错了

抽取特定的行数 TABLESAMPLE(10 ROWS)

SELECt     * FROM     ods_user_bucket_log TABLESAMPLE(10 rows); 

 

软件开发有限公司QVT 会员等级:企业会员优选VIP更值得信赖! 所在地区:全国 成立年份:2010年 公司电话:13988889999 联系姓名:张生(先生) 联系手机:13988889999 经营范围:软件开发有限公司QVT 公司地址:软件开发有限公司QVT 执照认证 实名认证 电话认证 邮箱认证 企业认证
背景开启

客集网是一个开放的平台,信息全部为用户自行注册发布!并不代表本网赞同其观点或证实其内容的真实性,需用户自行承担信息的真实性,图片及其他资源的版权责任! 本站不承担此类作品侵权行为的直接责任及连带责任。

如若本网有任何内容侵犯您的权益,请联系 QQ: 1130861724

网站首页 | 信息删除 | 付款方式 | 关于我们 | 联系方式 | 使用协议 | 版权隐私 | 网站地图 (c)2014-2024 Rights Reserved 鄂公网安备42018502007153 SITEMAPS 联系我们 | 鄂ICP备14015623号-21

返回顶部