内容简介:最近在做Hive的数据抽样,基于以下考虑:要求:
最近在做Hive的数据抽样,基于以下考虑:
-
效率:数据量大的时候,可以给Hive 的使用者提供抽样数据,供他们开发、测试,提高效率。
-
安全:有些场景,不便于提供全量数据给开发者,但是又不能影响建模效果,这时,就需要随机抽样数据给开发者。
要求:
-
随机
-
抽取数据量可控
-
分区信息需要保留,数据整体随机,分区内也要随机
1. 抽样方案
1.1 方案一:Block Sampling
Hive 本身提供了抽样函数,使用TABLESAMPLE 抽取指定的 行数/比例/大小 ,举例:
CREATE TABLE XXX AS SELECT * FROM YYY TABLESAMPLE(1000 ROWS); CREATE TABLE XXX AS SELECT * FROM YYY TABLESAMPLE (20 PERCENT); // 测试未生效 CREATE TABLE XXX AS SELECT * FROM YYY TABLESAMPLE(1M); // 测试未生效
缺点: 不随机 。该方法实际上是按照文件中的顺序返回数据,对分区表,从头开始抽取,可能造成只有前面几个分区的数据。
优点:速度快。
1.2 方案二:分桶表抽样 (Smapling Bucketized Table)
利用分桶表,随机分到多个桶里,然后抽取指定的一个桶。举例:随机分到10个桶,抽取第一个桶。
CREATE TABLE XXX AS SELECT * FROM YYY TABLESAMPLE (BUCKET 1 OUT OF 10 ON rand());
优点:随机,测试发现,速度比方法3的
rand()
快。
1.3 方案三:随机抽样 rand
原理:利用
rand()
函数进行抽取,
rand()
返回一个0到1之间的double 值。
法1
CREATE TABLE XXX AS SELECT * FROM YYY ORDER BY rand() limit 10000
此时,可以提供真正的随机抽样,但是,需要在单个
reducer
中进行总排序,
速度慢
。
法2
CREATE TABLE XXX AS SELECT * FROM YYY SORT BY rand() limit 10000
Hive 提供了
sort by
,
sort by
提供了单个
reducer
内的 排序 功能,但不保证整体有序,上面的语句是 不保证随机性
的。
法3
CREATE TABLE XXX AS SELECT * FROM YYY where rand()<0.002 distribute by rand() sort by rand() limit 10000;
where
条件首先进行一次
map
端的优化,减少
reducer
需要处理的数据量,提高速度。
distribute by
将数据随机分布,然后在每个
reducer
内进行随机排序,最终取10000条数据(如果数据量不足,可以提高
where
条件的
rand
过滤值)。
缺点: 速度慢
法4
CREATE TABLE XXX AS SELECT * FROM YYY where rand()<0.002 cluster by rand() limit 10000;
cluster by
的功能是
distribute by
和
sort by
的功能相结合,在上面的例子中,
distribute by rand() sort by rand()
进行了两次随机,
cluster by rand()
仅一次随机,那么,会影响最终的抽样结果吗?
2. 分区
但是,上面的方法,会 丢失掉分区信息 !
所以,需要结合动态分区:
-
step1: create table
-
step2: 利用动态分区,插入select 出来的结果。
set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nonstrict; INSERT INTO TABLE XXX partition(thedate) SELECT * FROM YYY TABLESAMPLE (BUCKET 1 OUT OF 10 ON rand());
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 【R语言实用技巧】随机排序、随机抽样与分层抽样
- R语言进行随机抽样sampling
- Spring Cloud 参考文档(Spring Cloud Sleuth抽样)
- 4 万字全面掌握数据库、数据仓库、数据集市、数据湖、数据中台
- 数据映射如何支持数据转换和数据集成?
- 大数据产品经理必备的数据挖掘知识概述(一)认识数据之数据可视化
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Coming of Age in Second Life
Tom Boellstorff / Princeton University Press / 2008-04-21 / USD 29.95
The gap between the virtual and the physical, and its effect on the ideas of personhood and relationships, is the most interesting aspect of Boellstorff's analysis... Boellstorff's portrayal of a virt......一起来看看 《Coming of Age in Second Life》 这本书的介绍吧!