Comment puis-je Parser JSON dans Pig?

j'ai beaucoup de gzip avais des fichiers journaux dans s3 qui a 3 types de lignes de log: b,c,j'. i et c sont les deux seul niveau json:

{"this":"that","test":"4"}
<!-Le Type b est profondément imbriqué dans le json. Je suis tombé sur ce gist on parle de compiler un bocal pour que ça marche. Comme mes compétences en java sont loin d'être exceptionnelles, Je ne savais pas vraiment quoi faire d'ici.

{"this":{"foo":"bar","baz":{"test":"me"},"total":"5"}}

puisque les types i et c ne sont pas toujours dans le même ordre, Cela fait spécifier tout dans le Regex generate difficile. La manipulation de JSON (dans un fichier gzip) est-elle possible avec Pig? J'utilise n'importe quelle version de Pig construite sur une instance de réduction de carte élastique D'Amazon.

Cela se résume à deux questions: 1) Puis-je Parser JSON avec Pig (et si oui, comment)? 2) Si je peux analyser JSON (à partir d'un fichier log de gzip), puis-je analyser des objets JSON imbriqués?

19
demandé sur Eric Lubow 2011-02-16 08:59:00

7 réponses

Pig 0.10 est livré avec builtin JsonStorage et JsonLoader().

cochon doc pour json load/store

16
répondu Thejas Nair 2012-07-03 22:00:44

après beaucoup de solutions de rechange et de travail à travers les choses, j'ai été en mesure de répondre pour obtenir ce fait. J'ai fait un article à ce sujet sur mon blog sur la façon de faire cela. Il est disponible ici: http://eric.lubow.org/2011/hadoop/pig-queries-parsing-json-on-amazons-elastic-map-reduce-using-s3-data/

8
répondu Eric Lubow 2011-03-01 21:30:08

Le cochon est livré avec un chargeur JSON. Pour charger vous utilisez:

A = CHARGEMENT des données.json'

USING PigJsonLoader ();

Pour stocker vous pouvez utiliser:

STORE INTO ‘output.json’ 
    USING PigJsonLoader();

cependant, je ne suis pas sûr qu'il supporte les données GZIPed....

5
répondu Eran Kampf 2011-02-24 11:53:23
3
répondu A B 2011-12-27 19:45:51

nous pouvons le faire en utilisant JsonLoader...Mais nous devons mentionner le schéma pour vos données json sinon il peut se produire une erreur..il suffit de suivre le lien ci-dessous

         http://joshualande.com/read-write-json-apache-pig/

on peut aussi le faire en créant UDF pour le parser...

2
répondu Reddevil 2014-07-25 07:26:01

Vous pouvez essayer usin le twitter elephantbird json chargeur , Il gère les données json dynamiquement.Mais vous devez être très précis avec le schéma .

api_data = LOAD 'file name' USING com.Twitter.eléphantbird.porc.charge.JsonLoader ('- nestedLoad');

0
répondu Shrikant 2015-09-09 20:44:46

j'ai vu l'utilisation de twitter elephantbird augmenter beaucoup et il est rapidement devenu le goto bibliothèque json l'analyse en COCHON.

Exemple :

DEFINE TwitterJsonLoader com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad=true ');

JsonInput = LOAD 'input_path' USING TwitterJsonLoader() AS (entity: map[]);

InputObjects = FOREACH JsonInput GENERATE (map[]) entity#'Object' AS   JsonObject;

InputIds = FOREACH InputObjects GENERATE JsonObject#'id' AS id;
0
répondu rahulbmv 2016-02-29 23:39:33