【问题标题】:Hive aggregation function that produces a map生成地图的 Hive 聚合函数
【发布时间】:2014-10-16 22:52:33
【问题描述】:

我有以下蜂巢表

ID、类、值

1,A,0.3

1, B, 0.4

1,C,0.5

2, B, 0.1

2,C,0.2

我想得到

ID, class:value

1, [A:0.3, B:0.4, C:0.5]

2, [B:0.1, C:0.2]


我知道有一个collect_set() UDAF 可以生成类列表或值列表,是否有获取键:值对的列表?

注意: 我想我可以使用两个collect_set() 一个用于类列,一个用于值列,但我不确定这些列表的顺序是否相同。

【问题讨论】:

标签: sql hadoop hive


【解决方案1】:

我使用 Brickhouse 库中的 UnionUDAF 来做类似的事情。您从每一对创建一个映射,然后在聚合过程中将它们合并在一起。

Add JAR brickhouse.jar;
create temporary function BH_union as 'brickhouse.udf.collect.UnionUDAF';

SELECT S.ID, BH_union(S.v_map) 
FROM (SELECT ID, map(class, value) as v_map from mytable) S
GROUP by S.ID

【讨论】:

    【解决方案2】:

    您可以使用 custom Map/Reduce scripts 和 collect_list()(来自 Hive 0.13.0)来实现相同的目的。

    如果您需要更多帮助,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-02
      • 2017-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      • 2014-11-27
      相关资源
      最近更新 更多