hadoop - 如何根据 Hive 中的最高值合并输出

标签 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

最佳答案

我认为以下内容可以满足您的要求。

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 bymax() 只保留每个 的最大值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/

相关文章:

sql - SQL错误中的复合键连接

hadoop - 在Hive中使用Rlike查找正则表达式模式

hadoop - hive -分区表

hadoop:lzo 压缩的自动可分割输出

hadoop - 在 HIVE 中加载外部表时如何忽略括号

hadoop - 以 hql/hive 查询语言输出/回显消息

java - 在Bluemix上公开自己的服务,该服务在后台使用Hadoop MapReduce?

java - 迭代的MapReduce作业具有NumberFormatException错误

hadoop - 写入带有分区的配置单元表时出错

hadoop - 分区表中要考虑的配置单元第一列