如何通过 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 中数组的总和对数组进行归一化?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据自己的类型对 3D 数组的特定维度中的特征进行归一化

对两个数组进行分组和归一化

动态归一化二维 numpy 数组

[Python] 数组归一化

如何规范化 3D 数组的特定维度

关于用matlab进行向量归一化的问题