hive 随机抽样 distribute by rand() sort by rand() limit n

这篇具有很好参考价值的文章主要介绍了hive 随机抽样 distribute by rand() sort by rand() limit n。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在分析或者处理大规模数据时,由于数据量较大时,一般只能随机抽样一部分的数据来分析,那么如何进行随机抽样呢?
下面有几种方法,目前常用的是distribute by rand() sort by rand() limit n

  1. order by rand() : order by 是全局的,比较耗时, 只有一个reduce,是真正的随机
select * from test_user_info_log order by rand() limit 10;
  1. sort by rand() : 提供了单个reducer内的排序,不保证整体有序,不是真正的随机
select * from test_user_info_log sort by rand() limit 10;
  1. distribute by rand() sort by rand() 是真正的随机抽样
select * from test_user_info_log 
distribute by rand() 
sort by rand()  
limit 10;

可以保证数据在map端和reduce端都是随机分布的,是进行了2次随机,这个时候可以做到真正的随机
4) cluster by rand() 也是真正的随机
等价与distribute by rand() sort by rand() 也是真正的随机,并且仅随机一次,速度会比方法3快

select * from test_user_info_log 
cluster by rand()  
limit 10;
  1. 分层抽样-分层抽个数

分层抽样有两种,一种是分层抽个数,一种是分层抽比例
下面的case是每种类型的用户抽样3个

select
    *
from (
    select
        buyer_id,user_type,
        row_number() over(partition by user_type order by rand() ) as rn
    from
        di.ba_ad_new_cate_fsp_byr where pt='2021-12-01'
) tmp
where rn<=3; 
  1. 分层抽比例
    例如:下面的case是每种类型的用户抽样50%的数据

select
    *
from (
    select
        buyer_id,user_type,
        row_number() over(partition by user_type order by rand() ) as rn
    from
        di.ba_ad_new_cate_fsp_byr where pt='2021-12-01'
) tmp
where pmod(rn,2) = 0; 
  1. 如果数据量比较少,也可以用takeSample(false, 500)的方法来抽样
spark.sql(s"select distinct buyer_id, order_id from order_info ")
  .rdd.takeSample(false, 500)

通过对takeSample采样分析发现,他是利用我们要取的数据量,和总的数据量计算出一个概率,然后再利用这个概率去进行二项分布抽样或者是泊松抽样。所以说不管是sample方法,还是takeSample方法,底层抽样的原理都是一样的,都是通过概率进行抽样的。
原理是将数据拉回到driver后返回成数组的形式,而不是rdd了文章来源地址https://www.toymoban.com/news/detail-422007.html

  1. tablesample 对一个表中的数据按行数或者比例抽样
select * from temp.order_test tablesample(1 percent)  --按照hive表的数据量比例抽样数据, n是百分比
select * from temp.order_test tablesample(3 rows)  --指定抽样数据的行数,n随机抽样n行

到了这里,关于hive 随机抽样 distribute by rand() sort by rand() limit n的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MATLAB第79期】基于MATLAB的数据抽样合集(sobol、LHS拉丁超立方抽样、Halton、正交/均匀设计、随机rand函数)

    [a b]区间随机数生成: A=a+(b-a)rand(m,n) m:待生成矩阵A的行数 n: 待生成矩阵A的列数 示例:生成-5到5之间的随机数 A = randi - 整数均匀随机分布 A= A = A = 每个正交表都有一个表头符号,记作LN(mk),表示该正交表有N行k列,每一列由整数1,2,…,m组成。 用表LN(mk)安排试验时,

    2024年02月02日
    浏览(59)
  • Hive 中 sort by 和 order by 的区别

    order by 会对输入做 全局排序 ,因此只有1个reducer(多个reducer无法保证全局有序),会导致当输入规模较大时,需要较长的计算时间。 sort by 不是全局排序,其在数据进入 reducer 前完成排序。 因此,如果用 sort by 进行排序,并且设置 mapred.reduce.tasks1 , 则 sort by 只保证每个

    2024年02月16日
    浏览(49)
  • Hive:聚合函数、GROUP BY、ORDER BY、LIMIT、执行顺序和JOIN、函数

    1.聚合函数 常见的聚合函数: Count、Sum、Max、Min和Avg 特点:不管原始数据多少条,聚合之后只有一条 Count(column)返回某列的行数,不包括NULL值 2.GROUP BY select中的字段要么是GROUP BY字段,要么是被聚合函数应用的字段 2.HAVING WHERE中无法出现聚合函数,所以有了HAVING WHERE是分组前

    2024年02月07日
    浏览(49)
  • 伪随机生成器(rand函数),随机数种子(srand函数)详细解读与分析:

    a.生成随机数; b.生成0~100以内的随机数 c.随机数的连续输出及其连续输出情况讲解与分析 首先我们来看一下rand函数(伪随机数生成器):   rand函数,即伪随机数生成器,该函数返回类型为整型,没有参数,即产生一个在(0-rand_max(十六进制的ox7ffff转化为整数即32767)的一个

    2024年02月11日
    浏览(52)
  • 概率统计·样本及抽样分布【随机样本、抽样分布】

    总体:试验的全部可能的观察值称为总体 个体:总体中每个可能的观察值称为个体 总体期望=样本平均期望 总体方差/n=样本平均方差 X 1 ,X 2 ……X n 相互独立(x 1 ,x 2 ……x n 是观察值),称为总体X的一个简单随机变量(样本) 联合=(全部)边缘相乘 函数表示化(不含未

    2024年02月10日
    浏览(57)
  • 【c++】rand()随机函数的应用(一)——rand()函数详解和实例

    c++语言中可以用rand()函数生成随机数,今天来探讨一下rand()函数的基本用法和实际应用。 本系列文章共分两讲,今天主要介绍一下伪随机数生成的原理,以及在伪随机数生成的基础上,生成随机数的技巧,下一讲主要介绍无重复随机数生成的方法和舒尔特方格数字生成的实例

    2024年02月08日
    浏览(44)
  • Android11 Wifi Mac地址设置随机或者固定分析

    本文对Android11 wifi MAC地址设置是否随机问题进行分析。 Android 8.0 开始,设备开始支持Wifi 随机MAC,说是为了安全。 很多手上也能看到Wifi 默认使用的是随机MAC地址。 但是有些情况下,需要固定MAC,比如有些OTA升级用的是Wifi MAC地址,这时候就要MAC固定。 所以有必要对设备 W

    2023年04月16日
    浏览(54)
  • 计算物理学复习笔记(一) 连续随机变量的抽样(直接、变换抽样,三类舍选法)

    使用教材:马文淦《计算物理学》,限于篇幅,这本书上部分知识写得并不十分详细,根据我复习时的一点想法,分享给大家参考。 本篇分享的是连续分布的随机变量抽样的几种方法(直接、变换抽样法,三类舍选法,复合抽样法,课本2.3节)。 首先不防问自己一个问题,

    2024年02月05日
    浏览(105)
  • C语言rand()函数产生随机数详解

    rand函数的原型: rand函数的功能: 用来产生一个随机数 rand函数的界限: stdlib.h头文件中有宏#define RAND_MAX 0x7fff,这表示rand产生一个0-0x7fff的随机数,即最大是32767的一个数 rand函数获取随机数的基础用法为: a是一个整数,返回值为0到a的随机数,包含0,但不包含a。 如果想要

    2024年02月06日
    浏览(44)
  • 随机抽样一致(RANSAC)算法及matlab实现

    RANSAC为 RANdom SAmple Consensus (随机抽样一致)的缩写,它是根据一组包含异常数据的样本数据集,计算出数据的数学模型参数,得到有效样本数据的算法。它于1981年由 Fischler 和 Bolles 最先提出。 RANSAC算法的应用背景是在一堆观察点中估计出某个模型 y y y 。 以2D模型为例,RA

    2024年02月01日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包