如何按多列分组,然后在Hive中进行转置

时间:2015-05-07 19:00:51

标签: hadoop hive data-analysis

我有一些数据要在多列上分组,执行聚合功能,然后使用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子句,但这不会将数据转换为多个列。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

你不一定需要来使用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