在hive中,我希望对从最大到最小的数组进行排序,并获得索引数组。
例如,该表是这样的:
id | value_array 1 | {30, 40, 10, 20} 2 | {10, 30, 40, 20}
我要得到这个:
id | value_array 1 | {1, 0, 3, 2} 2 | {2, 1, 3, 0}
结果中的arries是初始元素的索引。我怎样才能做到这一点?
使用posexplode爆炸数组以获取索引和值,按值排序,收集索引数组:
select id, collect_list(pos) as result_array from ( select s.id, a.pos, a.v from your_table s lateral view posexplode(s.value_array) a as pos, v distribute by s.id sort by a.v DESC --sort by value )s group by id ;
经过测试,结果:
id result_array 1 [1,0,3,2] 2 [2,1,3,0]