注意在偶数情况下,中位数会存在小数,特别注意!

hive里面倒是有个percentile函数和percentile_approx函数,其使用方式为percentile(col, p)、percentile_approx(col, p),p∈(0,1)p∈(0,1) 
其中percentile要求输入的字段必须是int类型的,而percentile_approx则是数值类似型的都可以 
其实percentile_approx还有一个参数B:percentile_approx(col, p,B),参数B控制内存消耗的近似精度,B越大,结果的准确度越高。默认为10,000。当col字段中的distinct值的个数小于B时,结果为准确的百分位数。 
如果我要求多个分位数怎么办呢?,可以把p换为array(p1,p2,p3…p1,p2,p3…),即

 
percentile_approx(col,array(0.05,0.5,0.95),9999)percentile_approx(col,array(0.05,0.5,0.95),9999)

如果不放心的话,就给col再加个转换:

 
percentile_approx(cast(col as double),array(0.05,0.5,0.95),9999)percentile_approx(cast(col as double),array(0.05,0.5,0.95),9999)

其输出结果长这样:

 
[0.0,4001.0,4061.0][0.0,4001.0,4061.0]

没法直接用啊!再加个转换:

 
explode(percentile_approx(cast(col as double),array(0.05,0.5,0.95),9999))as percentileexplode(percentile_approx(cast(col as double),array(0.05,0.5,0.95),9999))as percentile

输出结果就长这样了:

percentile
0
4001
4061

实际操作中,发现有时在计算分位数的时候mapper会卡在0%。 
前面说过,如果distinct的值小于B,就会返回精确值,那么个人猜测是因为后台执行的过程是先做了一个select distinct limit B,然后排序得到分位数。如果distinct值特别多的情况下,仅仅是去重就是一个巨大的运算负担,更别说排序了。而当把B从10000调到100的时候很快就能跑出来了.

转自:https://blog.csdn.net/sinat_27339001/article/details/52189843

-------------------------------------------------------

中位数函数: percentile
语法: percentile(BIGINT col, p) 
返回值: double
说明: 求准确的第pth个百分位数,p必须介于0和1之间,但是col字段目前只支持整数,不支持浮点数类型
举例:

中位数函数: percentile
语法: percentile(BIGINT col, array(p1 [, p2]…)) 
返回值: array<double>
说明: 功能和上述类似,之后后面可以输入多个百分位数,返回类型也为array<double>,其中为对应的百分位数。
举例:
select percentile(score,<0.2,0.4>) from udftest; 取0.2,0.4位置的数据

近似中位数函数: percentile_approx
语法: percentile_approx(DOUBLE col, p [, B]) 
返回值: double
说明: 求近似的第pth个百分位数,p必须介于0和1之间,返回类型为double,但是col字段支持浮点类型。参数B控制内存消耗的近似精度,B越大,结果的准确度越高。默认为10,000。当col字段中的distinct值的个数小于B时,结果为准确的百分位数
举例:

近似中位数函数: percentile_approx
语法: percentile_approx(DOUBLE col, array(p1 [, p2]…) [, B]) 
返回值: array<double>
说明: 功能和上述类似,之后后面可以输入多个百分位数,返回类型也为array<double>,其中为对应的百分位数。
举例:

直方图: histogram_numeric
语法: histogram_numeric(col, b) 
返回值: array<struct {‘x’,'y’}>
说明: 以b为基准计算col的直方图信息。
举例:
hive> select histogram_numeric(100,5) from dual;
[{"x":100.0,"y":1.0}]

示例:中位数、平均数计算方法:

select
avg(t1.price) as avg_price,
percentile(int(price), 0.5) as mid_price
from
dev.devXXXXX
group by
cate_id,
cate_name;

  

hive 分位数函数 percentile(col, p)的更多相关文章

  1. orcale和hive常用函数对照表(?代表未证实)

    函数分类 oracle hive 说明 字符函数 upper('coolszy') upper(string A) ucase(string A) 将文本字符串转换成字母全部大写形式 lower('K ...

  2. Hive常用函数

    字符串函数 字符串长度函数:length 语法: length(string A) 返回值: int 说明:返回字符串A的长度 举例: hive> select length(‘abcedfg’ ...

  3. hive学习(四) hive的函数

    1.内置运算符 1.1关系运算符 运算符 类型 说明 A = B 所有原始类型 如果A与B相等,返回TRUE,否则返回FALSE A == B 无 失败,因为无效的语法. SQL使用”=”,不使用”= ...

  4. hive常用函数四

    字符串函数 1. 字符串长度函数:length 语法: length(string A) 返回值: int 说明:返回字符串A的长度 举例: hive> select length('abced ...

  5. Hive sql函数

    date: 2018-11-16 19:03:08 updated: 2018-11-16 19:03:08 Hive sql函数 一.关系运算 等值比较: = select 1 from dual ...

  6. hive常用函数 wordCount--Hive窗口函数1.1.1 聚合开窗函数聚合开窗函数实战

    第三天笔记 第三天笔记 SQL练习Hive 常用函数关系运算数值计算条件函数日期函数重点!!!字符串函数Hive 中的wordCount1.1 Hive窗口函数1.1.1 聚合开窗函数聚合开窗函数实战 ...

  7. Hive自定义函数的学习笔记(1)

    前言: hive本身提供了丰富的函数集, 有普通函数(求平方sqrt), 聚合函数(求和sum), 以及表生成函数(explode, json_tuple)等等. 但不是所有的业务需求都能涉及和覆盖到 ...

  8. hive -- 自定义函数和Transform

    hive -- 自定义函数和Transform UDF操作单行数据, UDAF:聚合函数,接受多行数据,并产生一个输出数据行 UDTF:操作单个数据 使用udf方法: 第一种: add jar xxx ...

  9. hive 数值计算函数

    Hive数值计算函数 (1)round(45.666,2)作用:四舍五入,保留2位小数 ceil(45.6) 作用:向上取整         floor(45.6) 作用:向下取整 (2)rand() ...

随机推荐

  1. struts2自动接收表单数据

    提交页面主要代码: <form method="post" action="messageAction">   <input type=&qu ...

  2. innodb_buffer_pool_size=30G

    Starting program: /usr/local/mysql-5.6.27-linux-glibc2.5-x86_64/bin/mysqld-debug --user=mysql --data ...

  3. 插值技术之Bezier插值(1) -- Bezier Curve

    作者:i_dovelemon 来源:CSDN 日期:2015 / 7 / 11 主题:Interpolate,Bezier Curve 引言 在游戏开发中.诸如动画系统.路径计算等等操作,都会遇到对数 ...

  4. mock的概念

    1 现有的单元测试框架单元测试是保证程序正确性的一种有效的测试手段,对于不同的开发语言,通常都能找到相应的单元框架. 借助于这些单测框架的帮助,能够使得我们编写单元测试用例的过程变得便捷而优雅.框架帮 ...

  5. 需要掌握哪些python标准库和三方库?

    讨论参考:https://www.zhihu.com/question/20501628 库太多了,根据需要使用相应领域的三方库:至于对于企业常用的三方库,可以参考热门招聘网站的招聘说明

  6. CSS:CSS+DIV布局网页

    现代网页布局:CSS+DIV: 一般的网页都是顺序布局的,很难达到我们需要的网页布局格式,此时使用DIV进行分层布局,类似于盒子,对每一部分内容进行设计.这是现在主流的网页布局方式,使用DIV+CSS ...

  7. iOS:文件归档和解归档的详解和使用

    文件归档和解归档: 用途: 所谓文件归档,就是把需要存储的对象数据存储到沙盒的Documents目录下的文件中,即存储到了磁盘上,实现数据的持久性存储和备份.解归档,就是从磁盘上读取该文件下的数据,用 ...

  8. ndk 编译 c++ 兼容性问题汇总整理

    转自:http://blog.csdn.net/wenrenwang/article/details/12003671 1.__int64找不到符号 采用int64_t来代替: #if defined ...

  9. C++中 使用数组作为map容器VAlue值的解决方法

    1)是用Vector容器代替数组 2)使用数组指针(需要注意局部变量的问题,指针是否需要用new创建) int red [ 3 ]   = { 1 , 0 , 0 }; int green [ 3 ] ...

  10. 【转】Ubuntu 18.04安装小记

    我的电脑是神舟z7 kp7s1,显卡1060,尝试了Ubuntu的16.04,安装完进入界面总是卡死了,后面换18.04依然无解,和版本无关,而是因为英伟达的显卡问题. 参考了如下这篇文章:Ubunt ...