hadoop - 如何按多列分组,然后在 Hive 中转置

标签 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 子句,但这不会将数据转置到多个列中。

有什么想法吗?

最佳答案

您不一定需要使用 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/

相关文章:

"customers who bought x also bought y"的 Hadoop 数据流效率

hadoop 对键进行排序并更改键值

hadoop - hive外部表有什么意义?

matlab - 在协方差矩阵中选择最大特征值和特征向量在数据分析中意味着什么?

python - 从多个 Excel 文件和工作表中具有相同名称的特定列中提取数据

apache-spark - GCP Dataproc:使用存储连接器的网络带宽不足

hive - 是否有设置 'Application Priority' 的参数?

sql - 执行Spark Job时GettingTask不可序列化异常

apache-spark - 三角洲湖上的 hive 表

python - 计算 pandas DataFrame 中成对列的减法