2

给定一张桌子

+------------+-----------+
 |  Number   |  Count    |
+------------+-----------+
 |  0        |  7        |
+------------+-----------+
 |  1        |  1        |
+------------+-----------+
 |  2        |  3        |
+------------+-----------+
 |  4        |  1        |
+------------+-----------+

代表这样一个数字序列:0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 4

用 sql 求中位数,在本例中为 0。您将需要在 hive (qubole) 中运行此查询

想法?

4

1 回答 1

1

Hive 中有一个相当简单的解决方案。你在这里需要这个UDF。本质上,您希望取消汇总计数数据,然后对其进行百分位。

查询

add jar /path/to/jar/brickhouse-0.7.1.jar;
create temporary function numeric_range as 'brickhouse.udf.collect.NumericRange';

select percentile(number, 0.50) median
from (
  select number
  from db.table
  lateral view numeric_range(count) n1 as n) x 

内部查询将产生

0
0
0
0
0
0
0
1
2
2
2
4

然后你就可以使用percentile()这个列上的函数了

输出

median
------
0.0
于 2015-10-06T21:06:14.233 回答