Vous êtes sur la page 1sur 4

TP : MapReduce

MapReduce est un paradigme de traitement de données afin de condenser des grands volumes
de données en résultats agrégés utiles. En termes très simples, la commande MapReduce prend
deux entrées primaires, la fonction de mappage et la fonction de réducteur.

Un Mapper débutera par la lecture d'une collection de données pour construire une map avec
les champs que nous souhaiterons traiter. Puis cette paire clé, valeur est introduite dans un
réducteur, qui traitera les valeurs.

Figure1 : Paradigm de mapReduce


>db.collection.mapReduce(
function() {emit(key,value);}, //map function
function(key,values) {return reduceFunction}, //reduce function
{
out: nom-variable,
query: document,
sort: document,
limit: number
}
)

• map: Fonction javascript qui mappe une valeur à une clé et émet la paire clé/valeur
• reduce: Fonction javascript qui réduit ou regroupe tous les documents ayant la même
clé
• out: Spécifie l'emplacement du résultat de la spécifies de la map-reduce
• query: Précise les critères de sélection en option pour sélectionner les documents
• sort: Précise les critères de tri en option
• limit: Indique le nombre maximal option de documents à retourner

Exemple:

Affichage du nombre des films en base mongo par genre:

>var map =function() {emit(this.genre,1);};

>var reduce = function(key, values) { return Array.sum(values)};

>var count = db.movies.mapReduce(map, reduce, {out: "movies_result"});

>db.movies_result.find();

Exercices
Exercice 1:

Insertion de données :

db.text_data.insertMany([

{ content: "Hello world, this is a sample text for word count." },

{ content: "MongoDB is a popular NoSQL database." },

{ content: "NoSQL databases like MongoDB and Cassandra are scalable." }]);

Figure2 : Exemple de MapReduce

Dans cet exercice, compter l'occurrence de chaque mot dans la collection crée à l'aide de la
fonction de map-reduce.

Exercice 2:

Insertion de données :
db.student_scores.insertMany([
{ student_id: 1, score: 85 },

{ student_id: 1, score: 90 },

{ student_id: 2, score: 75 },

{ student_id: 2, score: 80 },

{ student_id: 3, score: 95 },

{ student_id: 3, score: 88 }]);

Dans cet exercice, calculer le score moyen de chaque élève à l'aide de la fonction de map-
reduce.

Exercice 3:

Insertion de données :

db.products.insertMany([

{ name: "Laptop", category: "Electronics" },

{ name: "Smartphone", category: "Electronics" },

{ name: "T-shirt", category: "Clothing" },

{ name: "Headphones", category: "Electronics" },

{ name: "Jeans", category: "Clothing" },

{ name: "TV", category: "Electronics" }

]);

Dans cet exercice, regrouper les produits par catégories à l'aide de la fonction de map-reduce.

-----------------------------------------------------------------------------------------------------------------

Exercice4 :

Créer la collection orders ci-après:

db.orders.insertMany([

{ _id: 1, cust_id: "Ant O. Knee", ord_date: new Date("2020-03-01"), price: 25, items: [ { sku: "oranges", qty: 5, price: 2.5 }, { sku:
"apples", qty: 5, price: 2.5 } ], status: "A" },

{ _id: 2, cust_id: "Ant O. Knee", ord_date: new Date("2020-03-08"), price: 70, items: [ { sku: "oranges", qty: 8, price: 2.5 }, { sku:
"chocolates", qty: 5, price: 10 } ], status: "A" },

{ _id: 3, cust_id: "Busby Bee", ord_date: new Date("2020-03-08"), price: 50, items: [ { sku: "oranges", qty: 10, price: 2.5 }, { sku:
"pears", qty: 10, price: 2.5 } ], status: "A" },
{ _id: 4, cust_id: "Busby Bee", ord_date: new Date("2020-03-18"), price: 25, items: [ { sku: "oranges", qty: 10, price: 2.5 } ], status:
"A" },

{ _id: 5, cust_id: "Busby Bee", ord_date: new Date("2020-03-19"), price: 50, items: [ { sku: "chocolates", qty: 5, price: 10 } ], status:
"A"},

{ _id: 6, cust_id: "Cam Elot", ord_date: new Date("2020-03-19"), price: 35, items: [ { sku: "carrots", qty: 10, price: 1.0 }, { sku:
"apples", qty: 10, price: 2.5 } ], status: "A" },

{ _id: 7, cust_id: "Cam Elot", ord_date: new Date("2020-03-20"), price: 25, items: [ { sku: "oranges", qty: 10, price: 2.5 } ], status: "A"
},

{ _id: 8, cust_id: "Don Quis", ord_date: new Date("2020-03-20"), price: 75, items: [ { sku: "chocolates", qty: 5, price: 10 }, { sku:
"apples", qty: 10, price: 2.5 } ], status: "A" },

{ _id: 9, cust_id: "Don Quis", ord_date: new Date("2020-03-20"), price: 55, items: [ { sku: "carrots", qty: 5, price: 1.0 }, { sku:
"apples", qty: 10, price: 2.5 }, { sku: "oranges", qty: 10, price: 2.5 } ], status: "A" },

{ _id: 10, cust_id: "Don Quis", ord_date: new Date("2020-03-23"), price: 25, items: [ { sku: "oranges", qty: 10, price: 2.5 } ], status:
"A" }

])

Dans cet exercice, créer la fonction map-reduce pour la collection orders afin de regrouper les
clients par cust_id puis calculer la somme du prix pour chaque cust_id .

Vous aimerez peut-être aussi