如何计算 Hive 中的中位数

Posted

技术标签:

【中文标题】如何计算 Hive 中的中位数【英文标题】:How to calculate median in Hive 【发布时间】:2014-11-11 10:51:55 【问题描述】:

我有一张蜂巢桌,

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;

感谢任何查询建议

【问题讨论】:

【参考方案1】:

您可以使用 percentile 函数来计算中位数。试试这个:

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

【讨论】:

如果我有一堆双精度值而不是整数怎么办? @Amar @Danzo hive 提供:percentile_approx(DOUBLE col, p [, B])【参考方案2】:

如果您有 INT 值,则接受的答案有效。如果您的数据包含 0-1 之间的值,例如模型的分数,您可以使用以下公式;

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

【讨论】:

【参考方案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;

【讨论】:

这不是蜂巢 你好@Success,尝试回答C++ questions,这里只为Hive提供一个。在 *** 上,TAG of the question 非常重要。您可以在此处删除您的答案以避免更多的反对票...似乎您不是在寻找 Hive,而是在寻找 C++ 或其他。

以上是关于如何计算 Hive 中的中位数的主要内容,如果未能解决你的问题,请参考以下文章

Hive - 如何获取每组值的分位数

hive计算分位数

如何在蜂巢中实现百分位数

如何计算 DataFrame 中的移动中位数?

如何计算 PrestoSQL 中的中位数?

java如何计算中位数