如何通过 Hive 中数组的总和对数组进行归一化?
Posted
技术标签:
【中文标题】如何通过 Hive 中数组的总和对数组进行归一化?【英文标题】:How to normalize an array by the sum of the array in Hive? 【发布时间】:2020-05-21 09:27:38 【问题描述】:我有一个这样的蜂巢表:
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来实现目标。
【问题讨论】:
【参考方案1】:分解数组,计算 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
;
【讨论】:
以上是关于如何通过 Hive 中数组的总和对数组进行归一化?的主要内容,如果未能解决你的问题,请参考以下文章