Comment transposer/pivot de données dans la ruche?
Je sais il n'y a aucun moyen direct pour transposer des données dans la ruche. J'ai suivi cette question: Est-il possible de transposer des données dans la Ruche? , mais comme il n'y a pas de réponse définitive il y a, ne pouvait pas obtenir tout le chemin.
C'est le tableau que j'ai:
| ID | Code | Proc1 | Proc2 |
| 1 | A | p | e |
| 2 | B | q | f |
| 3 | B | p | f |
| 3 | B | q | h |
| 3 | B | r | j |
| 3 | C | t | k |
Ici Proc1 peut avoir un nombre quelconque de valeurs. ID, Code & Proc1, ensemble, forment une clé unique pour cette table. Je veux Pivot/transposition de la table afin que chaque valeur unique dans Proc1 devient une nouvelle colonne, et la valeur correspondante de Proc2 est la valeur dans la colonne concernée de la ligne correspondante. En essence, je vais essayer d'obtenir quelque chose comme:
| ID | Code | p | q | r | t |
| 1 | A | e | | | |
| 2 | B | | f | | |
| 3 | B | f | h | j | |
| 3 | C | | | | k |
Dans le nouveau transformé la table, l'ID et le code sont la seule clé primaire. Depuis le billet je l'ai mentionné ci-dessus, j'ai pu obtenir cette mesure à l'aide de la to_map udaf, nous. (Avertissement - ce ne peut être une étape dans la bonne direction, mais le simple fait de mentionner ici, si elle est)
| ID | Code | Map_Aggregation |
| 1 | A | {p:e} |
| 2 | B | {q:f} |
| 3 | B | {p:f, q:h, r:j } |
| 3 | C | {t:k} |
Mais ne savez pas comment l'obtenir à partir de cette étape du pivot/transposée de la table que je veux.
Toute aide sur la façon de procéder sera grande!
Merci.
OriginalL'auteur Sunny | 2014-04-12
Vous devez vous connecter pour publier un commentaire.
Voici la démarche que j'ai utilisée pour résoudre ce problème à l'aide de la ruche interne de l'UDF, de "map":
"concat_ws" et "map" sont ruche udf et "collect_list" est une ruche à l'udaf, nous.
Cet exemple généraliser dans le cas où vous avez plus d'une colonne de pivot?
OriginalL'auteur Shakti Garg
Voici la solution que j'ai fini par utiliser:
La to_map UDF a été utilisé à partir de la brickhouse repo: https://github.com/klout/brickhouse
voici ce que j'étais en train de regarder github.com/klout/brickhouse/blob/master/src/main/resources/...
Vous pouvez utiliser le bouton "collect" udaf, nous - qui est similaire à to_map Le lien: github.com/klout/brickhouse/blob/master/src/main/java/... Vous devez remplacer "to_map" avec "recueillir" j'ai mis à jour la solution avec le même.
Salut! Je suis en train d'essayer quelque chose de similaire. Dans votre réponse, vous avez group_map['p'], etc., indiquant que les valeurs à l'avance. Comment avez-vous résolu de ne pas savoir ce que les valeurs dans Proc1? S'il vous plaît partager. Merci!
OriginalL'auteur Sunny
Encore une autre solution.
Pivot à l'aide de Hivemall
to_map
fonction.uid c1 c2 c3
101 11 12 13
102 21 22 23
Unpivot
uid key value
101 c1 11
101 c2 12
101 c3 13
102 c1 21
102 c2 22
102 c3 23
OriginalL'auteur myui
Je n'ai pas écrit ce code, mais je pense que vous pouvez utiliser certaines des fonctions définies par l'utilisateur fourni par klouts brickhouse: https://github.com/klout/brickhouse
Plus précisément, vous pourriez faire quelque chose comme l'utilisation de leurs recueillir comme indiqué ici: http://brickhouseconfessions.wordpress.com/2013/03/05/use-collect-to-avoid-the-self-join/
puis exploser les tableaux (ils seront de longueurs différentes), en utilisant les méthodes détaillées dans ce post http://brickhouseconfessions.wordpress.com/2013/03/07/exploding-multiple-arrays-at-the-same-time-with-numeric_ra
OriginalL'auteur user2726995
En cas de valeur numérique, vous pouvez utiliser en dessous de requête de la ruche:
Des données de l'échantillon
OriginalL'auteur Suman
Pour Unpivot, nous pouvons simplement utiliser en dessous de la logique.
OriginalL'auteur Anjib Rajkhowa
Ci-dessous est aussi une façon de Pivot
OriginalL'auteur Anjib Rajkhowa
Vous pouvez cas d'utilisation des déclarations et de l'aide de collect_set pour atteindre cet objectif. Vous pouvez vérifier cela. Vous pouvez vérifier les détails de répondre à http://www.analyticshut.com/big-data/hive/pivot-rows-to-columns-in-hive/
Voici la requête aux fins de référence,
OriginalL'auteur Mahesh Mogal