本文转自http://www.taobaotesting.com/blogs/2468,原文分层抽样的逻辑不是很清楚,按照自己的想法重新实现个
算法中可能会需要做抽样。用hive实现了随机抽样中简单随机、系统和分层抽样的方式,记得抽样的概念还是初中数据接触的
其实很多时候不需要理论,想也是可以想到的,不过还是总结一下
0.测试表:
drop table songpo_test;
create table if not exists songpo_test
(
refund_id string,
user_id string,
cat_id string,
cat2_id string,
org_id string,
gmt_create string
)
partitioned by(pt string)
row format delimited
fields terminated by ','
lines terminated by '\n' STORED AS SEQUENCEFILE;
1. 简单随机抽样 (rand()) 从表中,随机打标,排序,随机抽取100个用户数据
步骤 1). 给每行记录一个相同的标记
2). 排序,取前100
sql:
select *
from(
select user_id,flag from (select user_id,'1' as flag from songpo_test) x
distribute by user_id sort by user_id,flag desc
)a
where row_number(user_id)<=100;
2.系统抽样 mod,rand() 依照userrid取模,分5组,每组随机抽取100个用户,实现如:
1). 依据user_id,取模,获取 mod_numd
2). 在mod_num组内然后随机排序,
3). 从各组取出20条
sql:
select *
from(
select refund_id,user_id,mod_num,rank_num from (select refund_id,user_id,cast(10+rand()*100 as double) rank_num,user_id%5 as mod_num from songpo_test)
distribute by mod_num sort by mod_num,rank_num desc
)a
where row_number(mod_num)<=20;
3.分层抽样 按照每个组的记录数来分层抽样。假设需要抽取EXTRA_NUM条记录
1). 计算每个分区需要抽记录条数
2). 在mod_num组内然后随机排序,
3). 从各组取出cat_extra_num条
drop table test_data_extra_indexs;
create table test_data_extra_indexs as
select a.cat_id,cat_num,all_num,cat_num/all_num as extra_lv,(cat_num/all_num)*'EXTRA_NUM' as cat_extra_num,c.refund_id,c.user_id,c.org_id from
(select cat_id,count(1) as cat_num,'1' as key from songpo_test group by cat_id) a
join
(select '1' as key,count(1) as all_num from songpo_test) b
on a.key=b.key
join
(select * from songpo_test) c
on a.cat_id=c.cat_id;
select *
from(
select refund_id,user_id,cat_id,mod_num,rank_num from
select refund_id,user_id,cat_id,cast(10+rand()*100 as double) rank_num,user_id%5 as mod_num,cat_extra_num from(
(select refund_id,user_id,cat_id,cast(10+rand()*100 as double) rank_num,user_id%5 as mod_num from test_data_extra_indexs) x
)
distribute by mod_num sort by mod_num,rank_num desc
)a
where row_number(mod_num)<=20;
分享到:
相关推荐
基于python爬虫+Matplotlib+Echarts数据可视化+Mapreduce+hive数据统计+情感分析+词图云+电影票房与评分预测的数据采集、处理、分析及数据可视化的百万级电影数据离线处理与计算源码.zip 基于python爬虫+Matplotlib+...
Hive.sql
hive hive hive hive hive hive hive hive hive hive hive hive
包含video user数据
数据包括运行代码和数据类型,启动hive导入表和数据就可以运行结果
使用hive3.1.2和spark3.0.0配置hive on spark的时候,发现官方下载的hive3.1.2和spark3.0.0不兼容,hive3.1.2对应的版本是spark2.3.0,而spark3.0.0对应的hadoop版本是hadoop2.6或hadoop2.7。 所以,如果想要使用高...
Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive十分适合对数据仓库进行统计分析。 目录: Hive入门与实战.pdf hive函数...
hive-jdbc
Hive表生成工具,Hive表生成工具Hive表生成工具
1 Hive 概念与连接使用: 2 2 Hive支持的数据类型: 2 2.1原子数据类型: 2 2.2复杂数据类型: 2 2.3 Hive类型转换: 3 3 Hive创建/删除数据库 3 3.1创建数据库: 3 3.2 删除数据库: 3 4 Hive 表相关语句 3 4.1 Hive ...
Hive表分区,里面有比较详细的Hive表分区方法,希望能够有所帮助。
《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf《Hive数据仓库案例教程》教学课件 第...
Hive是一个基于Hadoop的数据仓库工具,它本身并不存储数据,部署在Hadoop集群上,数据是存储在HDFS上的. Hive所建的表在HDFS上对应的是一个文件夹,表的内容对应的是一个文件。它不仅可以存储大量的数据而且可以对...
Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive是十分适合数据仓库的统计分析和Windows注册表文件。 本文是Hive的开发...
Hive原理/Hive SQL/Hive 函数/数据仓库分层和建模/Hive sql优化/数据倾斜
Ambari下Hive3.0升级到Hive4.0,验证自测;
5.安装hive和mysq完成后,将mysql的连接jar包拷贝到$HIVE_HOME/lib目录下 如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行) mysql -uroot -p #(执行下面的语句 *.*:所有库下的所有表 %:任何IP地址...
利用Hive进行复杂用户行为大数据分析及优化案例(全套视频+课件+代码+讲义+工具软件),具体内容包括: 01_自动批量加载数据到hive 02_Hive表批量加载数据的脚本实现(一) 03_Hive表批量加载数据的脚本实现(二) ...
作为企业Hadoop应用的核心产品,Hive承载着FaceBook、淘宝等大佬 95%以上的离线统计,很多企业里的离线统计甚至全由Hive完成,如我所在的电商。 Hive在企业云计算平台发挥的作用和影响愈来愈大,如何优化提速已经...