Hive聚合函数,用于生成映射

时间:2013-10-16 19:02:07

标签: sql hadoop hive

我有以下的配置表

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可以生成一个类列表或值列表,无论如何都可以得到一个key:value对的列表?

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

2 个答案:

答案 0 :(得分:3)

我使用了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

答案 1 :(得分:0)

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

如果您需要更多帮助,请与我联系。