Aller au contenu

Enonce TP MrJob

Table des Matières



TP sur la librairie MRJob

Deux exercices vous sont proposés. Le travail doit être réalisé en local, sur vos machines personnelles, à l’aide de la librairie MrJob.

Exercice 1 - Questionner un fichier de ventes

Nous cherchons à recueillir des informations et calculer des statistiques sur des résultats de ventes stockés dans un fichier volumineux.

Créez un répertoire sur votre DD, et déposez le fichier de vente sur lequel vous allez travailler:

Le fichier est organisé en 6 colonnes :

  • date (format YYYY-MM-DD);
  • heure (format hh:mm);
  • ville d’achat;
  • catégorie de l’achat (parmi Book, Men’s Clothing, DVDs…);
  • somme dépensée par le client;
  • moyen de paiement (parmi Amex, Cash, MasterCard…).

Les colonnes sont séparées par une tabulation. Ce caractère est codé par \t en python. Exemple : print("avant\tapres") permet d’obtenir l’impression de la chaîne “avant     apres”.

Vous êtes maintenant équipés pour développer les scripts map-reduce avec la librairie MRJob. Voici une liste de questions que vous traiterez dans des fichiers .py différents pour garder trace de votre travail.

Structure type d’un script MrJob

from mrjob.job import MRJob
from mrjob.step import MRStep

class MonJob(MRJob):

    def steps(self):
        return [
            MRStep(mapper=self.mapper_1, reducer=self.reducer_1),
            # ajouter un MRStep supplémentaire pour un job multi-étapes
        ]

    def mapper_1(self, _, line):
        champs = line.split('\t')
        # yield (clé, valeur)

    def reducer_1(self, cle, valeurs):
        # yield (clé_résultat, valeur_résultat)

if __name__ == '__main__':
    MonJob.run()
Pour un job à une seule étape, steps() peut être omise : MrJob cherche alors automatiquement mapper et reducer.

  1. Quel est le nombre d’achats effectués pour chaque catégorie d’achat ?
  2. Quelle est la somme totale dépensée pour chaque catégorie d’achat ?
  3. Quelle somme est dépensée dans la ville de San Francisco dans chaque moyen de paiement ?
  4. Dans quelle ville la catégorie Women’s Clothing a permis de générer le plus d’argent Cash ?

    Indice

    Cette question nécessite 2 étapes : la première calcule le total par ville (filtrée sur la catégorie et le moyen de paiement), la seconde trouve le maximum global.

  5. Ajoutez une requête originale et complexe (i.e. nombre de STEPS > 1) de votre choix sur ce fichier.

Veillez à tester vos programmes en mode -r local, pour vérifier que vos algorithmes fonctionnent bien dans le cadre de traitements parallèles.

Exercice 2 - Anagramme

Étant donné un fichier de mots, écrire un script map-reduce qui détecte les mots ayant EXACTEMENT les mêmes lettres (mais dans un ordre différent).

Ainsi, par exemple, le fichier de mots suivant

melon, barre, deviner, lemon, arbre, fiable, fable, vendre, devenir, faible, barbe

donnera en sortie cette liste:

faible, fiable
arbre, barre
devenir, deviner
lemon, melon

La sortie ne devra afficher que les réponses avec aux moins 2 mots, et ne devra pas tenir compte des voyelles accentuées.

Piste algorithmique

Réfléchissez à une façon de représenter un mot telle que tous ses anagrammes aient exactement la même représentation — cette représentation sera votre clé MapReduce. Le reducer n’aura alors qu’à regrouper les mots partageant cette clé.

Dictionnaires de mots Pour vos tests intensifs, vous pourrez utiliser