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

时间:2015-10-01 09:40:15

标签: hadoop hive

如何计算同一项目的每组行的值的分位数(ntile或百分位数)?

我想知道项目' 101',只考虑' p'是1,例如,该值必须在前25%中。

create table t1
(item INT,
p INT,
value FLOAT
);

insert into t1 values ('101', '1', '.5');
insert into t1 values ('101', '2', '.4');
insert into t1 values ('101', '1', '.6');
insert into t1 values ('101', '2', '.2');
insert into t1 values ('101', '1', '.7');
insert into t1 values ('101', '2', '.3');
insert into t1 values ('102', '1', '1.5');
insert into t1 values ('102', '2', '1.4');
insert into t1 values ('102', '1', '1.6');
insert into t1 values ('102', '2', '1.2');
insert into t1 values ('102', '1', '1.7');
insert into t1 values ('102', '2', '1.3');

我尝试过以下操作,但收到错误。

SELECT 
    item,
    p,
    value,
NTILE(4) OVER (ORDER BY value DESC) AS quartile
FROM t1
group by item
where p=1

错误讯息:

  

编译语句时出错:FAILED ParseException第8行:0   缺少EOF在'其中'项目附近

我可以在R中执行,使用如下命令:

d[p==1, quantile(value, .75, na.rm=TRUE), by=item]

但出于性能原因,我在Hadoop中需要这个。

2 个答案:

答案 0 :(得分:8)

在使用Percentile函数的Hive中,我们可以找到分位数值。

以下查询用于查找每个项目的第25个,第50个,第75个百分点值。

 select item,p,percentile_approx(value,array(0.25,0.50.0.75)) 
 from t1 where p=1 group by item,p;

以下查询用于查找每个项目的给定百分位值。

select item,p,percentile_approx(value,0.5) 
from t1 where p=1 group by item,p;

答案 1 :(得分:1)

“哪里”应该在“分组依据”之前