背景
需要对hive某个map类型的info字段的value进行排序。
复制代码
1"value":"{-15, -56, -75, -32, -61}"
目标是要得到排好序的数组,以便取这组数据中的最大值和最小值。
复制代码
1[-75, -61, -56, -32, -15]
思路
在不写UDF的情况下对map中value的数字进行排序,可以把这组数字放到一个数组中,对数组进行排序后,下标第一个和最后一个元素分别对应最小值和最大值。
主要运用了sort_array 以及 explode和collect_list的用法。sort_array函数默认是升序的。
代码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14select 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
最后
以上就是虚拟发卡最近收集整理的关于【Hive】用sort_array和collet_list对一组数字进行排序,取最大值或最小值的全部内容,更多相关【Hive】用sort_array和collet_list对一组数字进行排序内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复