本文转自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;
分享到:
相关推荐
Hive提供了COUNT、SUM、AVG、MAX、MIN等聚合函数,以及GROUP BY、DISTRIBUTE BY、SORT BY等语句来实现这些统计。 6. **窗口函数**:对于时间序列分析,Hive的窗口函数(如ROW_NUMBER、LAG、LEAD、RANK等)能帮助...
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能来执行数据的统计、分析。它主要用于减少传统MapReduce编程的复杂性,可以使用类SQL语言对数据进行查询和分析...
9. **Hive的优化**:包括使用EXPLAIN命令分析查询计划,优化JOIN操作(如使用Broadcast JOIN),以及使用合适的统计信息(如COUNT DISTINCT估算)来提升查询效率。 10. **Hive与其他组件的集成**:Hive可以与HBase...
- 随机抽样车辆信息,进行多维度分析。 - 计算常高速通过的TopN卡口。 - 进行跟车分析。 6. 架构设计: - J2EE平台作为前端,用户可指定任务类型和参数。 - 平台调用Spark-submit脚本执行任务,根据用户筛选条件...
4. 大数据处理工具:Hadoop、Spark和Hive是常见的大数据处理工具,而Excel由于处理能力有限,通常不用于海量数据的分析。 5. 大数据应用:互联网是当前最突出的大数据环境,它产生了大量的用户行为数据、社交媒体...
- Hive的优化机制,包括动态分区、抽样统计等。 - 使用Hive的自定义函数来改善计算效率。 - 数据预处理技巧,如数据倾斜处理方法。 - 分区表的设计原则及其对计算性能的影响。 #### 三、Join算子在Hadoop中的...
**题目描述**:对于一张名为`tmp_row_num`的Hive表,需要按`muid`分组,然后在每个分组内按`time`升序排序。 **解题思路**:利用Hive中的`ROW_NUMBER()`窗口函数实现排序。 **HiveQL解答**: ```hql WITH ...
技术点23 蓄水池抽样(reservoir 抽样) 4.4 本章小结 5 优化HDFS 处理大数据的技术 5.1 处理小文件 技术点24 使用Avro 存储大量小文件 5.2 通过压缩提高数据存储效率 技术点25 选择合适的压缩解码器 ...
随着互联网的发展,大数据的重要性日益凸显,它改变了传统数据处理的理念,由抽样转向全体,追求效率而非绝对精确,关注相关性而非因果关系。 在大数据的采集阶段,不仅包括传统的Oracle等关系型数据库用于存储事务...
总结来说,大数据不仅仅是一种技术,更是一种思维方式,它挑战了传统的抽样统计方法,提倡全样本分析,关注相关性而非因果关系,并强调通过处理大量复杂数据来驱动创新和决策。随着技术的不断进步,大数据将继续在...
1. **数据量的爆发**:大数据时代,数据量的急剧增加使得我们不再局限于抽样分析,而是可以进行全样本分析,这改变了我们对概率和统计的理解,提高了决策的准确性和全面性。 2. **实时性与速度**:大数据处理技术的...
掌握抽样分布和中心极限定理;学会构建置信区间进行假设检验;以及运用方差分析、卡方检验和非参数检验。此外,简单和多元回归分析也是必不可少的统计方法。 其次,SQL是数据管理的语言,用于从数据库中提取、清洗...
在维克托·迈尔-舍恩伯格及肯尼斯·库克耶所著的《大数据时代》中提到,与传统的随机分析方法相比,大数据技术强调的是利用全部数据而非抽样来进行分析处理。这种方式能够更全面地反映出数据的整体特征和趋势。 IBM...