首页 > 解决方案 > 在 hive 中缩放列值在 0 和 1 之间

问题描述

我有一个名为 table1 的表,其中包含以下列:-

ID  count1  count2
A   3       5
B   1       7
C   2       9

我需要列 - count1 和 count2 的值介于 0 和 1 之间。我需要在配置单元中执行此操作以调整数据大小。决赛桌应该是这样的:-

ID  count1  count2
A   1       0
B   0       0.5
C   0.5     1

我写了以下查询: -

select a.ID, 
(((a.count1-min(a.count1))/(max(a.count1)-min(a.count1))),
(((a.count2-min(a.count2))/(max(a.count2)-min(a.count2)))
from table1 as a;

这个查询给了我一个关于列 ID 的错误分组。

请协助在 hiveql 中执行此操作。

标签: hivehiveql

解决方案


这可以通过使用minmax窗口函数来完成。空over()子句计算列中所有值的聚合。由于窗口函数不是聚合函数,因此无需group by.

select ID, 
(count1-min(count1) over())/(max(count1) over()-min(count1) over()),
(count2-min(count2) over())/(max(count2) over() -min(count2) over())
from table1

推荐阅读