如何在Hive中计算中位数

33

我有一个Hive表,

name    age     sal
A       45      1222
B       50      4555
c       44      8888
D       78      1222
E       12      7888
F       23      4555

我想计算年龄这一列的中位数。

以下是我的方法:

select min(age) as HMIN,max(age) as HMAX,count(age) as HCount,
IF(count(age)%2=0,'even','Odd') as PCOUNT 
from v_act_subjects_bh;

感谢任何查询建议

3个回答

91

你可以使用百分位数函数来计算中位数。尝试以下操作:

select percentile(cast(age as BIGINT), 0.5) from table_name

如果我有一堆双精度浮点数而不是整数会怎样?@Amar - Danzo
10
@Danzo Hive 提供:percentile_approx(DOUBLE col, p [, B])。 翻译为:使用 percentile_approx 函数来计算给定 DOUBLE 类型列 col 中的 p 分位数(第几个百分比),其中可选参数 B 控制函数的精确度。 - zhaozhi

0

如果您的数据包含介于0-1之间的值,例如模型得分,则可以使用以下公式;

select (percentile(cast(age as BIGINT), 0.5))/100 from table_name

你不是将它转换为BIGINT吗?那岂不是与你所说的相矛盾了吗? - undefined

-3
double median = 0;
double term = 0;
double term1 = 0;
if (size % 2 == 1)
{
    term = (size + 1 - 1) / 2;
    median = term;
}
else if (size % 2 == 0)

{
    
    term1 = (size - 1) / 2;
    term1 = term1 + ((size - 1) / 2) + 1;
    term1 = term1 / 2;
    median = term1;
}
cout << "Median of array: " << median << endl;

1
这不是Hive。 - DPColombotto
嗨@Success,请尝试回答C++问题,这里只有Hive问题。在Stackoverflow上,问题的标签非常重要。您可以删除您的答案以避免更多的踩票...似乎您不是在寻找Hive问题,而是C++或其他问题。 - Peter Krauss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接