Recueillir avec une Carte dans la Ruche

J'ai un tableau de la Ruche tels que

id  |  value
-------------
A      1
A      2
B      3
A      4
B      5

Essentiellement, je veux imiter Python defaultdict(list) et de créer une carte avec id que les clés et value comme les valeurs.

Requête:

select COLLECT_TO_A_MAP(id, value)
from table

De sortie:

{A:[1,2,4], B:[3,5]}

J'ai essayé d'utiliser klout est CollectUDAF() mais il semble que ce ne sera pas ajouter les valeurs dans un tableau, il suffit de les mettre à jour. Des idées?

EDIT:
Voici une description plus détaillée afin que je puisse éviter les réponses de référencement que j'essaie de fonctions dans la Ruche de la documentation. Supposons que j'ai une table

num    |id    |value
____________________
1       A      1
1       A      2
1       B      3
2       A      4
2       B      5
2       B      6

Ce que je cherche, c'est pour un udaf, nous fournit cette sortie

num     |new_map
________________________
1       {A:[1,2], B:[3]}
2       {A:[4], B:[5,6]}

À cette requête

select num
      ,COLLECT_TO_A_MAP(id, value) as new_map
from table
group by num

Il y a une solution pour y parvenir. Il peut être imité en utilisant Klout est (voir ci-dessus référencé udaf, nous) CollectUDAF() dans une requête telle que

add jar '~/brickhouse/target/brickhouse-0.6.0.jar'
create temporary function collect as 'brickhouse.udf.collect.CollectUDAF';

select num
       ,collect(id_array, value_array) as new_map
from (
      select collect_list(id) as id_array
            ,collect_list(value) as value_array
            ,num
      from table
      group by num
     ) A
group by num

Cependant, je préfère ne pas écrire une requête imbriquée.

EDIT #2

(Comme mentionné dans ma question d'origine) j'ai déjà essayé d'utiliser Klout est CollectUDAF(), même dans le cas où vous passez deux paramètre et il crée une carte. La sortie de ce qui est (si elle est appliquée à l'ensemble de données dans ma 1ère edition)

1    {A:2, B:3}
2    {A:4, B:6}

Comme indiqué dans ma question initiale, il ne collectionne pas les valeurs d'un tableau, il juste recueille le dernier (ou met à jour le tableau).

OriginalL'auteur gobrewers14 | 2014-07-18