2013-10-16 28 views
2

我有以下配置单元表产生一个地图蜂房聚合功能

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()一个用于class列和一个value列,但我不确定列表是否将以相同的顺序。

+0

brickhouse中有一个可能的collect()函数,它是一个开放源代码项目,其中包含有用的UDF。 http://brickhouseconfessions.wordpress.com/2013/02/21/lets-start-off-with-collect/ – viper

回答

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