Hive中实现数据抽样的三种方法(数据块抽样、分桶抽样、随机抽样)使用与区别详解

本文详细介绍了Hive中的数据抽样方法,包括数据块抽样、分桶抽样和随机抽样。数据块抽样按照文件顺序抽取数据,速度快但不随机;分桶抽样基于特定字段进行随机分布,速度较快;随机抽样通过rand()函数实现,其中order by方式最慢,distribute by和sort by组合方式能保证随机性。这些方法在大数据处理中用于获取数据样本,以便进行高效分析。
摘要由CSDN通过智能技术生成

前言
当数据量特别大时,对全体数据进行处理存在困难时,抽样就显得尤其重要了。抽样可以从被抽取的数据中估计和推断出整体的特性,是科学实验、质量检验、社会调查普遍采用的一种经济有效的工作和研究方法。

Hive提供了数据取样(SAMPLING)的功能,能够根据一定的规则进行数据抽样,目前支持数据块抽样,分桶抽样和随机抽样,下面结合具体例子分别学习。

准备工作
(1)新建测试用表:employInfo

create table employInfo(deptID int,employID int,employName string,employSalary double) 
row format delimited fields terminated by ',';

(2)导入测试数据:

load data local inpath '/home/hadoop/datas/employInfo.txt' into table employinfo;

测试的数据量较小,只有100条数据:
在这里插入图片描述
下面分别介绍三种抽样方式:

一、数据块抽样(Block Sampling)
使用TABLESAMPLE函数抽取指定的 行数/比例/大小。

优点:速度快。
缺点:不随机,该方法实际上是按照文件中的顺序返回数据,对分区表从头开始抽取,可能造成只有前面几个分区的数据。如下:

1、 tablesample(n percent)
根据hive表数据的大小按比例抽取数据,并保存到新的hive表中。如:抽取原hive表中10%的数据。

  • 注意:测试过程中发现,select语句不能带where条件且不支持子查询,可通过新建中间表或使用随机抽样解决
  • 该语句允许抽取数据大小的至少n%(不是行数,而是数据大小)做为输入,支持CombineHiveInputFormat而一些特殊的压缩格式是不能够被处理的,如果抽样失败,MapReduce作业的输入将是整个表。由于在HDFS块层级进行抽样,所以抽样粒度为块的大小,例如如果块大小为128MB,即使输入的n%仅为10MB,也会得到128MB的数据。

示例:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值