我有一些数据,我想在多列上进行分组,对其执行聚合函数,然后使用 Hive 转置到不同的列中。
例如,给定这个输入
输入:
hr type value
01 a 10
01 b 20
01 c 50
01 a 30
02 c 10
02 b 90
02 a 80
我想产生这个输出:
输出:
hr a_avg b_avg c_avg
01 20 20 50
02 80 90 10
我的输入中每个不同的 type
都有一个不同的列。 a_avg
对应于每小时的平均 a
值。
我如何在 Hive 中执行此操作?我猜我可能需要使用 https://github.com/klout/brickhouse/wiki/Collect-UDFs
到目前为止,我能想到的最好的方法是使用多个 group-by 子句,但这不会将数据转置到多个列中。
有什么想法吗?
最佳答案
您不一定需要使用 Brickhouse,但它肯定会让事情变得更容易。这就是我的想法,比如
select hr
, type_map['a'] a_avg
, type_map['b'] b_avg
, type_map['c'] c_avg
from (
select hr
, collect(type, avg_value) type_map -- Brickhouse collect; creates a map
from (
select hr
, type
, avg( value ) avg_value
from db.table
group by hr, type ) x
group by hr ) y
关于hadoop - 如何按多列分组,然后在 Hive 中转置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30109551/