Atelier 3: Pig

 
Utilisation de Pig Latin en lignes de commandes:

1. Créer le dossier local: /home/cloudera/pig_lab/input/
    Copier le fichier temp.csv dans ce dossier 
2. Lancer la commande pig en mode lcal depuis le dossier courant crée dans la question 1:
…]$ cd /home/cloudera/pig_lab/input
....] pig   -x local
   On obtiendra le shell pig: grunt>
3. Charger un fichier:
grunt> R = LOAD 'temp.csv' USING PigStorage(';') AS (year:chararray, temperature:int, categorie:int);
R est un bag (son contenu est temporaire) sur lequel on peut appliquer des commandes (describe, dump, …) et des opérateures relationnels (Filter, ....)
4. Appliquer des commandes à l'alias (bag) obtenu par Load:
grunt> DESCRIBE R
R: {year: chararray,temperature: int,categorie: int}
grunt> DUMP R;
(2011,17,4)
(2011,14,4)
(2011,29,4)
(2011,17,4)
(2012,25,3)
5. Filtrer des tuples à partir du résultat de Load:
grunt> FR = FILTER R BY temperature != 999 AND categorie IN (1, 4, 9);
grunt> DUMP FR;
….
(2014,7,9)
….
6. Faire un groupement de tuples:
grunt> GR = GROUP FR BY year;
grunt> describe GR;
GR: {group: chararray, FR : {year: chararray, temperature: int, categorie : int}}
grunt> DUMP GR;
( 2011, {(2011,32,1),(2011,251), …} )
…..
7. Appliquer un traitement à chaque groupe (tuple de GR) pour avoir la température maximale:
grunt> MaxT = FOREACH GR GENERATE group, MAX (FR.temperature);
grunt> DUMP MaxT ;
(2011,71)
(2012,50)
….
8. Stocker un bag dans un dossier:
 grunt> STORE MaxT INTO 'output/' ;
9. Pour obtenir le nombre de températures par année:
grunt> NbT = FOREACH GR GENERATE group, COUNT(FR) AS Nb;
grunt> Describe  NbT;
11. Obtenir le schéma et le plan d'exécution d'un bag (MaxT )
grunt> ILLUSTRATE MaxT ;

EXERCICES:
 RENDRE LES EXERCICES 1 et 3

Exercice 1:

Le fichier vol.csv contient les colonnes suivantes séparées par ";":

Année de vol , mois du vol, jour du voln° de vol, aéroport de départ, aéroport d'arrivée et distance du vol

  • Copier ce fichier dans le dossier local à créer : /home/cloudera/pig_lab/input
  • Lancer pig en mode local dans un terminal avec :  pig  -x local
  • Ecrire les scripts suivants où le nom du fichier à traiter (charger) est fourni en paramètre au moment de l'exécution avec la commande run ou exec (le fichier est  vol.csv ou autre).
  1. Ecrire un script Pig pour calculer le nombre de vol en partance de chaque aéroport:  (nom_aéroport, nb_vol).

  2. Ecrire un script Pig pour calculer le nombre de vols en partance d'un aéroport donné en paramètre.

  3. Ecrire un script Pig pour calculer la distance maximale.

Exercice 2 :

Soit bank.csv un fichier csv dont chaque ligne contient l'identifiant d'une banque, l'identifiant d'un client, le montant annuel versé, le montant annuel retiré et l'année, par exemple: ma123; 1293; 100530; 89000; 2019

Ecrire des scripts Pig pour avoir:

  1. Les identifiants des clients débiteurs (sans répétitions)
  2. Le nombre de clients par banque. (sans répétitions)
  3. Le nombre de clients débiteurs par banque (chaque client doit être considéré une seule fois)
  4. Des tuples dont chacun contient deux champ: l'identifiant d'une banque (ce 1ier champ sera de type chararray) et la liste des identifiants de ses clients sans répétitions (ce 2ème champ sera un bag)
  5. Le montant total versé et le montant total retiré pour chaque client
    On veut avoir l'identifiant du client, montant total versé, montant total retiré.
  6. Le nombre de fois débiteur et le nombre fois créditeur pour chaque client
    On veut avoir l'identifiant du client, nombre de fois où il étatit débiteur, nombre de fois où il était créditeur.

Exercice 3 :

  • Copier le fichier maman.txt dans le dossier local  /home/cloudera/pig_lab/input
  • Ecrire un script pig pour calculer le nombre d'occurrences d'un mot dans maman.txt. Le mot recherché est donné en paramètre (Compléter l'exemple de cours utilisant TextLoader et tokenize - Page 120)