La fusion des deux ensembles de données dans le Cochon
J'ai un script pig dans lequel je suis le chargement d'un jeu de données, plongée dans deux bases de données distinctes et ensuite effectuer quelques calculs et enfin d'ajouter un autre champ calculé. Maintenant, je veux me joindre à ces deux ensembles de données.
A = LOAD '/user/hdfs/file1' AS (a:int, b:int);
A1 = FILTER A BY a > 100;
A2 = FILTER A BY a <= 100 AND b > 100;
-- Now I do some calculation on A1 and A2
Donc, essentiellement, d'après le calcul, voici le schéma pour les deux:
{A1 : {a:int, b:int, type:chararray}}
{A2: {a:int, b:int, type:chararray}}
Maintenant, avant que je dump ce retour à la SF, je veux fusionner les deux ensembles de données de retour. Quelque chose comme UNION ALL
en SQL. Comment puis-je le faire?
Sur une note différente, vous pouvez optimiser le script en utilisant SPLIT (pig.apache.org/docs/r0.7.0/piglatin_ref2.html#SPLIT) à la place du FILTRE.
OriginalL'auteur divinedragon | 2013-01-11
Vous devez vous connecter pour publier un commentaire.
De l'UNION doit travailler pour vous - mais votre schéma d'origine ne correspond pas à l'image b est chargé comme un chararray et, plus tard, devient un int) - je suppose que c'est une faute de frappe.
Si les tuples ont des champs dans les différentes commandes, vous pouvez utiliser le ONSCHEMA mot-clé lors de la réalisation de l'UNION:
MODIFIER Lien vers le PigLatin docs pour UNION
Dans ce cas, vous n'avez pas besoin de la ONSCHEMA mot-clé lors de la réalisation de l'UNION.
Quelle est la signification de
ONSCHEMA
?De l'UNION docs:
Use the ONSCHEMA clause to base the union on named fields (rather than positional notation). All inputs to the union must have a non-unknown (non-null)
. Sans elle, si les deux ensembles ont eu les mêmes noms de champs, mais dans des ordres différents, vous obtiendrez bizarre résultatsOriginalL'auteur Chris White
Vous pouvez utiliser SPLIT
OriginalL'auteur n3xus