【Hive】用sort_array和collet_list对一组数字进行排序,取最大值或最小值

背景

需要对hive某个map类型的info字段的value进行排序。

"value":"{-15, -56, -75, -32, -61}" 

目标是要得到排好序的数组,以便取这组数据中的最大值和最小值。

[-75, -61, -56, -32, -15]

 思路

在不写UDF的情况下对map中value的数字进行排序,可以把这组数字放到一个数组中,对数组进行排序后,下标第一个和最后一个元素分别对应最小值和最大值。

主要运用了sort_array 以及 explode和collect_list的用法。sort_array函数默认是升序的。

代码


select 
  sorted_array[0] as min_number                          --最小值
  ,sorted_array[size(sorted_array)-1] as max_number      --最大值
from 
  (
    select sort_array(collect_list(cast (number as double))) as sorted_array   --排序好的数组
    from 
      (
        select regexp_replace(regexp_replace( info['value'], '\\{', ''), '\\}', '') as value
        from table1
      ) a 
    lateral view explode(split(value, ',')) tb as number
  ) b

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值