如何在Hive地图中提取最大价值的键和值?

时间:2018-08-08 22:51:24

标签: hive

我在Hive中有一个包含如下所示地图的字段: {"258":0.10075276284486512,"259":0.00093852142318649,"262":0.015979321337627,"264":0.0020453444772401,"265":0.024689771044731,"268":0.018837925051338,"274":0.011282124863882}

我想为每行提取此映射的最大值的键[和值(如果可能)]。在这种情况下,理想函数将如下所示:

select max_val(col) from table

输出:

 max_val
 "258"
 "165"
 "204"

1 个答案:

答案 0 :(得分:0)

explodemap列中,然后使用诸如rank之类的排名函数对所需的值进行排序,并首先获得该行。 (这假定在下面显示的查询中,有一种方法可以用除mapid之外的其他任何列来标识行。)

select id,k,v
from (select id,k,v,rank() over(partition by id order by v desc) as rnum
      from tbl
      lateral view explode(mapCol) t as k,v
     ) t
where rnum=1