如何解决hive同时计算多个分位数的问题
来源:互联网 发布:天下粮仓 知乎 编辑:程序博客网 时间:2024/06/05 07:31
http://blog.csdn.net/sinat_27339001/article/details/52189843
众所周知,原生Hive没有计算中位数的函数(有的平台会有),只有计算分位数的函数percentile
在数据量不大的时候,速度尚可。但是数据量一上来之后,完全计算不出来。
那么如何解决这个问题呢,我们可以使用 row_number() over()通过两次排序来解决同时计算多个分位数,速度飞快。
比如我们需要计算mkt_mcc_storeidx表下以mkt_label,mccgroup,month分组,value_mccgroup的分位数
第一步:利用row_number() over()给value_mccgroup在分组里排序,记录下排名
第二步:计算mkt_label,mccgroup,month分组下的数据总数
第三步:join前两步的结果,取rank=你需要计算的分位数位置,想计算多少个分位数就计算多少个
第四步:再排一次序,这次数据量就已经少了很多了,毕竟每组里面只有几个数据,记录排名
第五步:得到具体的分位数
第六步:行转成列,所有分位数计算完毕
后来查看了下SQL代码的执行树,发现percentile利用了map来存数据,怪不得这么耗内存,其实时间久并不是算的时间久,是因为内存不够了,系统一直在回收内存
而rank over 仅仅就是个排序而已
- 顶
- 1
0 0
- 如何解决hive同时计算多个分位数的问题
- 如何解决hive同时计算多个分位数的问题
- hive计算分位数
- eclipse - 解决虚拟机与IDE位数不同时启动不了的问题(位数:32位/64位)
- 如何解决有限无限同时上网的问题
- 如何解决spark写hive慢的问题
- hive sql解决关联条件中不等值连接问题及累计值的计算
- 阶乘位数的计算
- 计算 1 的位数
- 计算整数的位数
- 计算整数的位数
- 计算n!的位数
- 如何计算一个字节中1的位数
- Hive:解决Hive创建文件数过多的问题
- Hive:解决Hive创建文件数过多的问题
- 两个Hive无法启动问题的解决
- Hive中文乱码问题之一的解决
- Hive中文注释乱码问题的解决
- CRC32源码
- poj 2155 Matrix (二维树状数组)
- 开发环境的安装和配置
- 进度条
- Linux内核分析——Linux内核如何装载和启动一个可执行程序
- 如何解决hive同时计算多个分位数的问题
- SSL 1120——【USACO 2.4】回家[最短路]
- Atiitt 使用java语言编写sql函数或存储过程
- 关于客户端向服务器端上传文件/照片 失败的情况.可以尝试此方法
- No operations allowed after statement closed.
- WDCP面板系列教程
- spring--data-mongondb ...CannotGetMongoDbConnectionException: Failed to authenticate to database
- 哈希表中线性探测再散列法及等概率条件下平均查找长度
- bzoj 4556