hadoop—如何按多个列分组,然后在hive中转置

6yjfywim  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(298)

我有一些数据,我想对多个列进行分组,对其执行聚合函数,然后使用配置单元将其转置到不同的列中。
例如,给定这个输入

输入:

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
到目前为止,我能想到的最好方法是使用多个GROUPBY子句,但这不会将数据转置到多个列中。
有什么想法吗?

toiithl6

toiithl61#

你不一定需要使用砖房,但它肯定会使它更容易。我是这么想的

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

相关问题