我有以下蜂巢表
ID、类、值
1,A,0.3
1,乙,0.4
1,C,0.5
2,乙,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()
用于类列,一个用于值列,但我不确定这些列表是否会按相同的顺序排列。
我使用了 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
您可以使用自定义 Map/Reduce 脚本和 collect_list()(来自 Hive 0.13.0)来实现相同的目的。
如果您需要更多帮助,请告诉我。