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

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

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

输入:

  1. hr type value
  2. 01 a 10
  3. 01 b 20
  4. 01 c 50
  5. 01 a 30
  6. 02 c 10
  7. 02 b 90
  8. 02 a 80

我要生成以下输出:

输出:

  1. hr a_avg b_avg c_avg
  2. 01 20 20 50
  3. 02 80 90 10

其中每个不同的列都有一个不同的列 type 在我的输入中。 a_avg 与平均值相对应 a 每小时的值。
我在 hive 里怎么做?我想我可能需要利用https://github.com/klout/brickhouse/wiki/collect-udfs
到目前为止,我能想到的最好方法是使用多个GROUPBY子句,但这不会将数据转置到多个列中。
有什么想法吗?

toiithl6

toiithl61#

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

  1. select hr
  2. , type_map['a'] a_avg
  3. , type_map['b'] b_avg
  4. , type_map['c'] c_avg
  5. from (
  6. select hr
  7. , collect(type, avg_value) type_map -- Brickhouse collect; creates a map
  8. from (
  9. select hr
  10. , type
  11. , avg( value ) avg_value
  12. from db.table
  13. group by hr, type ) x
  14. group by hr ) y

相关问题