如何在Hive中基于最高值合并输出

时间:2013-06-19 12:50:16

标签: hadoop hive

我有以下输入,其中用户以下列百分比(25或50或75或100)观看节目。我只想计算某个用户在特定ID上观看的最高百分比。 输入和输出如下所示。

输入

id1, u1, watched25
id2, u1, watched25
id1, u1, watched50
id1, u1, watched75
id3, u1, watched25
id4, u1, watched25
id1, u1, watched100
id2, u1, watched50
id5, u1, watched25
id5, u1, watched50
id5, u1, watched75
id5, u1, watched100
id1, u2, watched25
id1, u2, watched50
id3, u2, watched25
id3, u3, watched25
id1, u2, watched75
id4, u3, watched25
id4, u3, watched50

所需的输出

id1, u1, watched100
id2, u1, watched50
id3, u1, watched25
id5, u1, watched25
id5, u1, watched100
id1, u2, watched75
id3, u2, watched25
id3, u3, watched25
id4, u3, watched50

2 个答案:

答案 0 :(得分:1)

我认为以下内容符合您的要求。

select id, u, max(cast(substr(w, 9) as int)) 
from my_table 
group by id, u 
order by u, id

这里结合了一些东西。让我解开重要的部分。

首先,我使用"watched"(从第八个字母开始的子字符串)丢弃第三列的substr(w, 8)部分,然后使用cast(X as int)将此值转换为数字,最后我使用group bymax()仅保留每个id, u元组的最高值。我添加了order by子句以匹配所需输出示例的排序。

在输入上运行此结果会产生以下输出。

id1  u1 100
id2  u1 50
id3  u1 25
id4  u1 25
id5  u1 100
id1  u2 75
id3  u2 25
id3  u3 25
id4  u3 50

希望有所帮助。

答案 1 :(得分:0)

您可以使用pig来实现此目的(假设百分比是数字)

a = LOAD 'input' as (id:chararray, user:chararray, percentage:int);
b = group a by (id, user);
c = foreach b generate group.id, group.user, MAX(a.percentage) as highest;

STORE c into 'output';
相关问题