4 votes

Comment charger un TSV contenant un champ JSON en Pig Latin ?

J'essaie de charger un fichier dont le schéma est principalement TSV (tab separated values), mais dont l'un des champs est une valeur JSON. Il semble que Pig Latin dispose de TextLoader pour les valeurs séparées par des tabulations (ou autres), et de JsonLoader pour JSON...

En particulier, chaque ligne de données ressemble à :

date\tevent_name\tevent_details\n

où event_details est une chaîne formatée en JSON. Les autres sont simplement des tableaux de caractères.

Quel est le moyen le plus simple de charger ces données ?

Notes : j'utilise Pig ver 0.11.1.

10voto

mbells Points 398

(Après avoir fait un tas de recherches, voici la réponse :)

Téléchargez les bibliothèques nécessaires à partir de http://mvnrepository.com/ nécessaires pour les commandes de registre.

Le porc script serait le suivant :

register 'libs/elephant-bird-core-4.1.jar';
register 'libs/elephant-bird-pig-4.1.jar';
register 'libs/guava-14.0.1.jar';
register 'libs/json-simple-1.1.1.jar';
register 'libs/piggybank.jar';

define decode_json com.twitter.elephantbird.pig.piggybank.JsonStringToMap();

e1 = load '$filename' using PigStorage() as (
    date: chararray,
    event_name: chararray,
    event_details_str: chararray,
);

-- Remove the header row:
e2 = filter e1 by not date matches '.*DATE';

-- Convert the event_details from a JSON string to a map:
events = foreach e2 generate *, decode_json(event_details_str) as event_details;

3voto

Richipal Points 493

La réponse de mbells fonctionne bien, mais j'ai eu du mal à trouver comment récupérer les valeurs de la carte. Voici un exemple de récupération de key1 et key2 dans la carte des événements.

fields = FOREACH events GENERATE events#'key1', events#'key2';

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X