8
votes

Comment aplatir un groupe en un seul tuple chez le cochon?

à partir de ceci: xxx

... Comment pourrions-nous générer ceci? xxx

... et comment pourrait-on générer cette ? xxx

pour une seule ligne, je sais faire. Le problème est que je dois itération sur plusieurs lignes et manipuler des groupes internes à la fois.


0 commentaires

3 Réponses :


11
votes

Pour votre question, j'ai préparé le fichier suivant: xxx

Au début, j'ai utilisé le script suivant pour obtenir l'entrée R3 que vous avez décrite dans votre question : xxx

si nous voulons générer le contenu suivant, xxx

Nous pouvons utiliser le script suivant: xxx

pour le contenu suivant, xxx

Je ne trouve pas de fonction intégrée utile. Peut-être que vous devez écrire votre baguet personnalisé. Voici les codes source BagTotuple intégré:


1 commentaires

Et s'il y a plus d'un champ, 1,2,3 1,3,4 1,4,5 2,5,6 2,6,7 2,7,8 et nous voulons la production comme (1, 2, 3,3,4,4,5) (2, 5,6, 6,7, 7,8)



3
votes

Il n'y a pas de moyen intégré de convertir un sac en tuple. En effet, les sacs sont des ensembles de tuples non ordonnés , de sorte que le cochon ne sait pas quel ordre que les tuples devraient être réglés lorsqu'il est converti en tuple. Cela signifie que vous devrez écrire un UDF pour le faire.

Je ne sais pas comment vous créez le (1, 2, 3, 4) tuple, mais c'est un autre Bon candidat pour un UDF, même si vous pouviez créer ce schéma avec juste le BagTotuple UDF.

Note: Vous ne devriez probablement rien transformer en tuple, à moins que vous ne sachiez exactement Combien de champs il y a.

myudfs.py xxx

myscript.pig xxx


0 commentaires

4
votes

Pour obtenir: xxx

Vous pouvez le faire: xxx


1 commentaires

Solution incroyable! Pourquoi ne fonctionne-t-il pas. foreach R3 génère des travaux de BagToTuple (B)? Cela me donne (1,4,1,3,1,2)) (2,7,2,6,2,5)), qui semble irrationnel.