site:enseignement:master:bdle:tmes:tme3-prise-main-spark
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| site:enseignement:master:bdle:tmes:tme3-prise-main-spark [07/09/2017 12:12] – amine | site:enseignement:master:bdle:tmes:tme3-prise-main-spark [15/10/2018 09:09] (Version actuelle) – [Interrogation des données] amine | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | {{indexmenu_n> | + | {{indexmenu_n> |
| - | ====== [TME II-2] | + | ====== [TME II-1] |
| - | Pour l'aide sur l' | + | **Remarque générale :** Le cours ne peut être // |
| + | Pour l'aide sur l' | ||
| ===== Exercice 1 ===== | ===== Exercice 1 ===== | ||
| - | //Cet exercice est la suite de l' | ||
| + | Copier le fichier | ||
| + | < | ||
| Lancer le spark-shell en mode local ([[spark|voir Doc]]) en suivant les instructions fournies | Lancer le spark-shell en mode local ([[spark|voir Doc]]) en suivant les instructions fournies | ||
| puis charger le fichier | puis charger le fichier | ||
| Ligne 24: | Ligne 26: | ||
| - Grouper les paires par ‘mot’ et additionner leur nombre nb. | - Grouper les paires par ‘mot’ et additionner leur nombre nb. | ||
| - Reprendre les questions 3 et 4 en calculant ‘mot’ différemment : désormais, ‘mot’ doit correspondre au préfixe du premier sous-élément de chaque élément de list, çad, pour en.d, mot doit être en, pour fr.d, mot doit être fr, etc. Comparer les résultats avec ceux obtenus précédemment. | - Reprendre les questions 3 et 4 en calculant ‘mot’ différemment : désormais, ‘mot’ doit correspondre au préfixe du premier sous-élément de chaque élément de list, çad, pour en.d, mot doit être en, pour fr.d, mot doit être fr, etc. Comparer les résultats avec ceux obtenus précédemment. | ||
| - | **Remarque** pour partitionner une chaîne de caractères en utilisant le point (.) comme délimiteur à l'aide de la méthode split(), il faut protéger le point avec \, i.e split(" | + | **Remarque** pour partitionner une chaîne de caractères en utilisant le point (.) comme délimiteur à l'aide de la méthode split(), il faut protéger le point avec \, i.e split(" |
| + | |||
| + | <showif isloggedin> | ||
| + | **Réponse** | ||
| + | <code scala> | ||
| + | // | ||
| + | |||
| + | val list = data.map(_.split(" | ||
| + | |||
| + | |||
| + | // | ||
| + | |||
| + | val q12 = list.map(x=> | ||
| + | |||
| + | // | ||
| + | |||
| + | val q13 = list.map(x=> | ||
| + | |||
| + | // | ||
| + | |||
| + | val q14 = q13.reduceByKey((x, | ||
| + | //ou bien q13.reduceByKey(_+_) | ||
| + | |||
| + | // | ||
| + | |||
| + | val q13bis = list.map(x=> | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | </ | ||
| + | </ | ||
| ===== Exercice 2 ===== | ===== Exercice 2 ===== | ||
| Cet exercice s’intéresse à la formulation de jointures simples en Scala. | Cet exercice s’intéresse à la formulation de jointures simples en Scala. | ||
| Ligne 50: | Ligne 84: | ||
| * films (MovieID, Title, Genres) | * films (MovieID, Title, Genres) | ||
| - | === Structure de donnée : Dataset=== | + | |
| - | Pour le TME sur les Dataset, récupérer le fichier suivant: | + | |
| - | <code bash> | + | |
| - | cp / | + | |
| - | emacs tme-dataset-etudiant.scala & | + | |
| - | </ | + | |
| Ligne 72: | Ligne 101: | ||
| Par exemple, pour le nuplet (1,Toy Story (1995), | Par exemple, pour le nuplet (1,Toy Story (1995), | ||
| Indice: pour construire films_bis, il est possible d’imbriquer une fonction map à l’intérieur d’une autre (cf. question 2 de l’exercice 3). | Indice: pour construire films_bis, il est possible d’imbriquer une fonction map à l’intérieur d’une autre (cf. question 2 de l’exercice 3). | ||
| + | |||
| + | |||
| + | <showif isloggedin> | ||
| + | **Réponse** | ||
| + | <code scala> | ||
| + | //a. le nombre de notes (ratings) réalisées par chaque utilisateur identifié par son UserID | ||
| + | val q2a = notes.map{case(userId, | ||
| + | |||
| + | //b. le nombre de notes (ratings) réalisées par chaque localisation donnée par le Zip-code | ||
| + | val q2b = utilis.map{case(userId, | ||
| + | |||
| + | |||
| + | //c. le nombre de notes (ratings) réalisées par chaque genre de film | ||
| + | //jointure en notes et films | ||
| + | val q2c = notes.map(x=> | ||
| + | |||
| + | |||
| + | //d. les 10 utilisateurs ayant noté le plus de films. | ||
| + | val q2d = notes.map(x=> | ||
| + | |||
| + | //e. Les films ayant reçu le moins de notes | ||
| + | //f. Les utilisateurs n’ayant noté aucun film | ||
| + | |||
| + | |||
| + | |||
| + | //genre de films | ||
| + | val films_bis = films.map(x=> | ||
| + | |||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | === Exercice Subsidiaire : reprendre les questions précédentes en utilisant l'API Dataset === | ||
| + | Pour utiliser les Dataset, récupérer le fichier suivant: | ||
| + | <code bash> | ||
| + | cp / | ||
| + | emacs tme-dataset-etudiant.scala & | ||
| + | </ | ||
site/enseignement/master/bdle/tmes/tme3-prise-main-spark.1504779154.txt.gz · Dernière modification : de amine
