Hive 的数据抽样

栏目: 服务器 · 发布时间: 5年前

内容简介:最近在做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()); 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Coming of Age in Second Life

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》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

随机密码生成器
随机密码生成器

多种字符组合密码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具