3Hive数据抽样

ops/2025/1/14 17:55:49/

3Hive数据抽样

  • 1 随机抽样
  • 2 块抽样
  • 3 桶表抽样

当数据规模不断膨胀时,我们需要找到一个数据的子集来加快数据分析效率。因此我们就需要通过筛选和分析数据集为了进行模式 & 趋势识别。目前来说有三种方式来进行抽样:随机抽样,桶表抽样,和块抽样。

1 随机抽样

关键词:rand()函数。
使用rand()函数进行随机抽样,limit关键字限制抽样返回的数据,其中rand函数前的distribute和sort关键字可以保证数据在mapper和reducer阶段是随机分布的。
案例如下:

select * from table_name 
where col=xxx 
distribute by rand() sort by rand() 
limit num; 

使用order 关键词:
案例如下:

select * from table_name 
where col=xxx 
order by rand() 
limit num; 

经测试对比,千万级数据中进行随机抽样 order by方式耗时更长,大约多30秒左右。

2 块抽样

关键词:tablesample()函数。
1.tablesample(n percent) 根据hive表数据的大小按比例抽取数据,并保存到新的hive表中。如:抽取原hive表中10%的数据
注意:测试过程中发现,select语句不能带where条件且不支持子查询,可通过新建中间表或使用随机抽样解决。

select * from xxx tablesample(10 percent) 数字与percent之间要有空格

2.tablesample(nM) 指定抽样数据的大小,单位为M。

select * from xxx tablesample(20M) 数字与M之间不要有空格

3.tablesample(n rows) 指定抽样数据的行数,其中n代表每个map任务均取n行数据,map数量可通过hive表的简单查询语句确认(关键词:number of mappers: x)

select * from xxx tablesample(100 rows) 数字与rows之间要有空格

3 桶表抽样

关键词:tablesample (bucket x out of y [on colname])。
其中x是要抽样的桶编号,桶编号从1开始,colname表示抽样的列,y表示桶的数量。
hive中分桶其实就是根据某一个字段Hash取模,放入指定数据的桶中,比如将表table_1按照ID分成100个桶,其算法是hash(id) % 100,这样,hash(id) % 100 = 0的数据被放到第一个桶中,hash(id) % 100 = 1的记录被放到第二个桶中。创建分桶表的关键语句为:CLUSTER BY语句。
例如:将表随机分成10组,抽取其中的第一个桶的数据:

select * from table_01 
tablesample(bucket 1 out of 10 on rand())

http://www.ppmy.cn/ops/150066.html

相关文章

Node.js——fs(文件系统)模块

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

PySpark用sort-merge join解决数据倾斜的完整案例

假设有两个大表 table1 和 table2 ,并通过 sort-merge join 来解决可能的数据倾斜问题。 from pyspark.sql import SparkSession from pyspark.sql.functions import col# 初始化SparkSession spark SparkSession.builder.appName("SortMergeJoinExample&quo…

Blazor开发复杂信息管理系统的优势

随着现代企业信息管理需求的不断提升,开发高效、易维护、可扩展的系统变得尤为重要。在这个过程中,Blazor作为一种新兴的Web开发框架,因其独特的优势,逐渐成为开发复杂信息管理系统的首选技术之一。本文将结合Blazor在开发复杂信息…

IIS安全配置基线

IIS安全配置基线 1. 限制目录的执行权限2. 开启日志记录功能3. 自定义错误页面4. 关闭目录浏览功能5. 停用或删除默认站点6. 删除不必要的脚本映射7. 专职低权限用户运行网站8. 在独立的应用程序池中运行网站 IIS(Internet Information Services)安全部署…

【C语言】标准IO

目录 1. 什么是标准IO 1.1概念 1.2特点 1.3 操作 2. 缓存区 3. 函数接口 3.1打开文件fopen 3.2关闭文件 3.3读写文件操作 3.3.1每次读写一个字符:fgetc()、fputc() a. 针对文件 b. 针对终端 3.3.2 每次一串字符的读写fgets()和fputs() c. 针对终端 d…

基于微信小程序的书籍销售系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

PHP RCE

靶场搭建 生成容器 docker run -p 18022:22 -p 18080:80 -p 18081:81 -p 18082:82 -p 18085:85 -i -t mcc0624/cmd:latest bash -c /etc/rc.local; /bin/bash 管理网站 http://<IP>:18085/CZKJ2022 用户名&#xff1a;admin 密码&#xff1a;Pssw0rd SSH 用户名root 密…

深度学习——pytorch基础入门

一、张量 在PyTorch中&#xff0c;张量是PyTorch中最基本的数据结构。张量可以看作是一个多维数组&#xff0c;可以在GPU上加速运算。PyTorch的张量和Numpy的数组非常类似&#xff0c;但是与Numpy不同的是&#xff0c;PyTorch的张量可以自动地在GPU上进行加速计算。 PyTorch中的…