Chap 8
Chap 8
Chap 8
Durant cette semaine, nous continuerons notre étude de les applications Mapreduce en réalisant 3 projets
de différents sujets. Dans la plupart du temps, vous devez compléter un morceau de code et ensuite
l'appliquer sur un jeu de données. (Copiez le code dans JupyterNote book et complétez). Vous pouvez
vérifier si votre code est correctement implémenté à l'aide des expected outputs.
La croissance des supermarchés dans la plupart des villes peuplées est en augmentation et la concurrence
sur le marché est également élevée. L'ensemble de données est l'une des ventes historiques de l'entreprise
de supermarché qui a enregistré dans 3 succursales différentes pendant 3 mois des données.
gross
Invoice Customer Product Unit Tax gross
Branch City Gender Quantity Total Date Time Payment cogs margin Rating
ID type line price 5% income
percentage
“
L'objective de ce TP est donc de calculer le total des ventes par villes.
Vous devez normalement voir tous les containers en run sur votre ordinateur. Dans mon exemple, nous
avons utiliser le container MJ_TEST pour ce module. Nous allons donc copier le fichier d'import
supermarket_sales_Module7.csv dans ce container pour la suite du TP.
Nous allons donc maintenant copier le fichier d'import csv dans notre container de test: MJ_TEST
docker cp "C:\Users\minglei.jiang\Documents\Gitlab\lpcafe\Modules\Module7
BigData\supermarket_sales_Module7.csv" MJ_TEST:/home/jovyan/
Où "C:\Users\minglei.jiang\Documents\Gitlab\lpcafe\Modules\Module7
BigData\supermarket_sales_Module7.csv" est le chemin complet de notre fichier csv, MJ_TEST est le nom
du container, cp signifie que "copy" et /home/jovyan/ est le path du page d'accueil de container que vous
pouvez trouvez dans les configurations du container:
Vous devez normalement trouver que le fichier est présent, après l'exécution de la commande, dans le
page d'accueil de votre container via Jupyternotebook lancé sur localhost:
8.1.3 Copier le fichier d'import dans HDFS
Nous allons tout d'abord créer un nouveau dossier MapReduceProjets pour centraliser nos fichiers
d'import:
Nous utilisons la commende -copyFromLocal pour copier un fichier local dans le HDFS.
Vous devez normalement trouver que le fichier est présent, après l'exécution de la commande, dans le
dossier MapReduceProjets.
8.1.4 mapperTP01.py
L'objective de mapperTP01.py est de définir les paires clé/ valeur . Dans notre cas, il s'agit de se concentrer
sur les deux colonnes: City et Total.
#!/usr/bin/env python
from __future__ import print_function
import sys
Une fois que vous aurez terminé l'implémentation(en complétant les 5 champs vides, 01 ... 05), testez
mapperTP01.py en complétant le code suivant(Champ vide 06), sachant que nous voulons négliger la
phase reduce pour le moment:
Found 3 items
-rw-r--r-- 1 jovyan supergroup 0 2021-01-25 23:06 outTp01/_SUCCESS
-rw-r--r-- 1 jovyan supergroup 8278 2021-01-25 23:06 outTp01/part-00000
-rw-r--r-- 1 jovyan supergroup 8234 2021-01-25 23:06 outTp01/part-00001
-------------------------------
City Total
Yangon 548.9715
Naypyitaw 80.22
Yangon 340.5255
Yangon 489.048
-------------------------------
Naypyitaw 42.3675
Mandalay 1022.49
Yangon 33.432
Yangon 69.111
Yangon 649.299
8.1.5 reducerTP01.py
Passons à la phase reduce. L'objective de reducerTP01 est bien évidemment d'agréger les nombres total
des ventes ville par ville. Regardons le code suivant:
#!/usr/bin/env python
from __future__ import print_function
from operator import itemgetter
import sys
current_city = None
current_prix = 0
city = None
try:
prix = float(prix)
except ValueError:
# prix was not a number, so silently
#ignore/discard this line
continue
if 03:
04 #calculer la somme des prix par ville
else:
if 05:
# write result to STDOUT
print(current_city, current_prix) #print cle valeur
06 #passer a la cle suivant (ville)
07 #initialisation le prix pour le ville suivant
Une fois que vous aurez terminé l'implémentation(en complétant les 8 champs vides, 01 ... 08), testez
mapperTP01.py et reducerTP01.py en complétant le code suivant(Champs vide 09 et 10):
Found 2 items
-rw-r--r-- 1 jovyan supergroup 0 2021-01-25 23:17 outTp01/_SUCCESS
-rw-r--r-- 1 jovyan supergroup 64 2021-01-25 23:17 outTp01/part-00000
-------------------------------
Mandalay 106197.672
Naypyitaw 110568.7065
Yangon 106200.3705
8.1.6 Conclusion
Avec les deux programmes réalisés dans ce TP, nous arrivons à localiser les ventes totales par ville qui nous
permettra d'identifier plus clairement la répartition des ventes entre les villes et quelle(s) villes nous
rapporte la plus de vente.
Une façon de comprendre comment fonctionne une administration municipale consiste à examiner qui elle
emploie et comment ses employés sont rémunérés. Ces données contiennent les noms, le titre du poste et
la rémunération des employés de la ville de San Francisco sur une base annuelle de 2011 à 2014.
Nous avons pris les fichiers bruts ici[ https://transparentcalifornia.com/salaries/san-francisco/ ] et les avons
combinés / normalisés dans un seul fichier CSV.
Id EmployeeName JobTitle BasePay OvertimePay OtherPay Benefits TotalPay Year Notes Agency Status
De la même manière que 8.1.2 et 8.1.3 , nous copions le fichier salaries_Module7.csv dans notre
dossier HDFS: MapReduceProjets
L'objective de ce TP02 est déterminer les salaires maximum et minimum pour chaque profession ainsi de
compter combien de personnes ont touché ce max/min.
8.2.2 mapperTP02.py
L'objective de mapperTP02.py est également, comme TP01, de définir les paires clé/ valeur . Dans notre
cas, il s'agit de se concentrer sur les deux colonnes: JobTitle et TotalPay. En plus, il faut aussi afficher un
compteur de 1. Donc ça fait en total une clé deux valeurs pour le flux de sortie.
#!/usr/bin/env python
from __future__ import print_function
import sys
#################
#Avec l'aide de mapperTP01, compléter vous même mapperTP02
#################
# input comes from STDIN (standard input)
# remove leading and trailing whitespace
# split the line into words
# Afficher cle valeur city and Total
Une fois que vous aurez codé mapperTP02, testez mapperTP02.py, sachant que nous voulons négliger la
phase reduce pour le moment:
Found 3 items
-rw-r--r-- 1 jovyan supergroup 0 2021-01-26 15:59 outTp02/_SUCCESS
-rw-r--r-- 1 jovyan supergroup 2406862 2021-01-26 15:59 outTp02/part-00000
-rw-r--r-- 1 jovyan supergroup 2214694 2021-01-26 15:59 outTp02/part-00001
-------------------------------
Fire Safety Inspector 2 148947.78 1
Firefighter 149886.01 1
Police Officer 3 154283.1 1
Police Officer 2 155112.33 1
Registered Nurse 150246.66 1
-------------------------------
Custodian 0.0 1
Not provided 0.0 1
Not provided 0.0 1
Not provided 0.0 1
Counselor, Log Cabin Ranch -618.13 1
8.2.3 reducerTP02.py
Passons à la phase reduce. L'objective de reducerTP02 est donc de garder le salaire maximum et minimum
pour chaque profession et de compter combien de personnes ont touché ce max/min.
#!/usr/bin/env python
current_pro = None
max_salaire = 0
min_salaire = 0
current_counter = 0
pro = None
try:
salaire = float(salaire)
except ValueError:
# salaire was not a number, so silently
#ignore/discard this line
continue
try:
counter = float(counter)
except ValueError:
# counter was not a number, so silently
#ignore/discard this line
continue
if min_salaire == 0:
03 #initialiser une valeur au minimum pour la premier cle,valeur
if current_pro == pro:
if max_salaire < salaire: # le maximum
04
if min_salaire > salaire: #le minimum
05
06 #calcule le nombre du employer par profession
else:
if current_pro:
# write result to STDOUT
07
08 #passer a la cle suivant
09 #initialisation du conteur de la profession suivante
10 #initialisation du salaire de la profession suivante
11 #intialiser premier salaire de la cle suivante comme un minimum
12 #intialiser premier salaire de la cle suivante comme un maximum
Une fois que vous aurez terminé l'implémentation(en complétant les 8 champs vides, 01 ... 12), testez
mapperTP02.py et reducerTP02.py en complétant le code suivant:
8.3 TP03: Déterminer l'âge moyen des personnes par sexe. dans la catastrophe
du Titanic
Nous connaissons tous le désastre qui s'est produit le 14 avril 1912. Le gros navire géant de 46 000 tonnes a
sombré à une profondeur de 13 000 pieds dans l'océan Atlantique Nord. Notre objectif est d'analyser les
données obtenues après cette catastrophe. Hadoop MapReduce peut être utilisé pour traiter efficacement
ces grands ensembles de données afin de trouver une solution à un problème particulier.
L'objective de ce TP est de faire une analyse du jeu de données Titanic Disaster, pour trouver l'âge moyen
des hommes et des femmes décédés dans cette catastrophe avec MapReduce Hadoop.
Survived(0/1)
PassengerID /*1 If Person Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
is dead */
De la même manière que 8.1.2 et 8.1.3 , nous copions le fichier salaries_Module7.csv dans notre
dossier HDFS: MapReduceProjets
L'objective de mapperTP02.py est de définir les paires clé/ valeur. Mais cette fois ci avec une condition en
plus qui est donc de filtrer sur toutes les personnes décédées.
#!/usr/bin/env python
from __future__ import print_function
import sys
#################
#Avec l'aide de mapperTP01 et mapperTP02, compléter le code
#################
Une fois que vous aurez codé mapperTP02, testez mapperTP02.py, sachant que nous voulons négliger la
phase reduce pour le moment.
Found 3 items
-rw-r--r-- 1 jovyan supergroup 0 2021-01-30 00:53 outTp03/_SUCCESS
-rw-r--r-- 1 jovyan supergroup 1911 2021-01-30 00:53 outTp03/part-00000
-rw-r--r-- 1 jovyan supergroup 1856 2021-01-30 00:53 outTp03/part-00001
-------------------------------
female 42 1
female 14 1
female 24 1
female 45 1
female 28 1
-------------------------------
female 15 1
female 56 1
female 25 1
female 19 1
male 26 1
8.3.3 reducerTP03.py
Passons à la phase reduce. L'objective de reducerTP03 est donc de calculer l'âge moyen par sexe des
personnes décédées pendant la catastrophe. En déduit de la même logique que TP01 et TP02,
implémentez le reducerTP03.py
#!/usr/bin/env python
from __future__ import print_function
import sys
#################
#Avec l'aide de reducerTP01 et reducerTP02, compléter le code
#################
Une fois que vous aurez terminé l'implémentation, testez mapperTP03.py et reducerTP03.py.
Found 2 items
-rw-r--r-- 1 jovyan supergroup 0 2021-01-30 01:04 outTp03/_SUCCESS
-rw-r--r-- 1 jovyan supergroup 61 2021-01-30 01:04 outTp03/part-00000
-------------------------------
('female', 28.84771573604061)
('male', 27.276021505376345)