hive rand函数_Hive进阶—抽样的各种玩法

本文详细介绍了Hive中抽样的各种方法,包括rand()函数结合order by, sort by, distribute by sort by, cluster by进行随机抽样,以及tablesample()函数的分桶抽样和数据块抽样。讨论了按比例抽样、特定大小和行数的抽样,并探讨了随机抽样如何实现按比例抽样和分层抽样。" 95191119,8669882,WPF自定义依赖集合属性更新问题解决方案,"['WPF开发', 'C#', 'UI设计', '数据绑定']
摘要由CSDN通过智能技术生成

抽样

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

  1. 一些机器学习的场景中,数仓作为数据的提供方提供样本数据

  2. 数据的计算结果异常或者是指标异常,这个时候如果我们往往需要确认数据源的数据是否本身就有异常

  3. SQL的性能有问题的时候我们也会使用抽样的方法区查看数据,然后进行SQL调优

  4. 在大规模数据量的数据分析及建模任务中,往往针对全量数据进行挖掘分析时会十分耗时和占用集群资源,因此一般情况下只需要抽取一小部分数据进行分析及建模操作。

随机抽样(rand()函数)

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

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

下面我们用到了前面我们使用过的一张表大概4603089 条记录,这里我就不给大家准备数据了,大家可以看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 '\t'
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;

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值