如何通过Hive中的数组总和归一化数组?

问题描述 投票:0回答:1

我有一个像这样的配置表:

id  | value_array
1   | [1, 2, 3, 4]
2   | [1, 2, 1, 1]

我希望通过数组的总和对value_array进行归一化,以便获得以下结果:

id  | value_array
1   | [0.1, 0.2, 0.3, 0.4]
2   | [0.2, 0.4, 0.2, 0.2]

我不知道如何编写SQL来实现目标。

sql hive hiveql
1个回答
0
投票

分解数组,计算sum(),除以每个元素,然后再次收集数组。像这样(未经测试):

with your_data as (--use your table instead of this
select stack (2,
1,array(1, 2, 3, 4),
2,array(1, 2, 1, 1)
) as (id,value_array)
)

select id, collect_list(v/array_sum) as result_array
from
(
select id, sum(v) over(partition by id) as array_sum, v, pos
  from your_data s
       lateral view posexplode(s.value_array) a as pos, v
distribute by id sort by pos --preserve original array order
)s
group by id
;
© www.soinside.com 2019 - 2024. All rights reserved.