我在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"
答案 0 :(得分:0)
explode
在map
列中,然后使用诸如rank
之类的排名函数对所需的值进行排序,并首先获得该行。 (这假定在下面显示的查询中,有一种方法可以用除map
,id
之外的其他任何列来标识行。)
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