我有以下输入,其中用户以以下百分比(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
最佳答案
我认为以下内容可以满足您的要求。
select id, u, max(cast(substr(w, 9) as int))
from my_table
group by id, u
order by u, id
这里结合了一些东西。让我解开重要的部分。
首先,我使用 substr(w, 8)
(从第八个字母开始的子字符串)丢弃第三列的 "watched"
部分,然后我转换该值使用 cast(X as int)
到一个数字,最后我使用 group by
和 max()
只保留每个 的最大值code>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
希望对您有所帮助。
关于hadoop - 如何根据 Hive 中的最高值合并输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17191652/