site:enseignement:master:bdle:tmes:tme3-scala
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-scala [11/10/2017 11:36] – amine | site:enseignement:master:bdle:tmes:tme3-scala [01/10/2018 12:39] (Version actuelle) – amine | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | {{indexmenu_n> | + | {{indexmenu_n> |
- | ====== [TME II-1] Introduction à Scala ====== | + | ====== [Pré-requis] Introduction à Scala ====== |
- | **Remarque générale :** Le cours ne peut être // | + | **Remarque générale :** Le cours ne peut être // |
- | + | ===== Exercice | |
- | ===== Exercice | + | |
Cet exercice illustre les différentes structures de contrôle de Scala présentées en cours. Il permet de comprendre | Cet exercice illustre les différentes structures de contrôle de Scala présentées en cours. Il permet de comprendre | ||
le paradigme fonctionnel : **seules les fonctions //map, reduce, flatten, filter, flatMap// sont autorisées**. | le paradigme fonctionnel : **seules les fonctions //map, reduce, flatten, filter, flatMap// sont autorisées**. | ||
+ | |||
+ | Lancer le spark-shell en mode local ([[spark|voir Doc]]). | ||
+ | Répondre aux questions ci-dessous. | ||
==== Question 1 ==== | ==== Question 1 ==== | ||
Ligne 19: | Ligne 21: | ||
</ | </ | ||
- | <showif isloggedin> | ||
**Réponse** | **Réponse** | ||
<code scala> | <code scala> | ||
Ligne 26: | Ligne 27: | ||
def moyEntiers(in: | def moyEntiers(in: | ||
</ | </ | ||
- | </ | ||
==== Question 2 ==== | ==== Question 2 ==== | ||
Ligne 40: | Ligne 40: | ||
Bien entendu, il faudra faire les transformations et les conversions de type nécessaires! | Bien entendu, il faudra faire les transformations et les conversions de type nécessaires! | ||
- | <showif isloggedin> | ||
**Réponse** | **Réponse** | ||
<code scala> | <code scala> | ||
Ligne 47: | Ligne 46: | ||
moyEntiers(temp2009) | moyEntiers(temp2009) | ||
</ | </ | ||
- | </ | ||
Ligne 64: | Ligne 62: | ||
- | <showif isloggedin> | ||
**Réponse** | **Réponse** | ||
<code scala> | <code scala> | ||
Ligne 70: | Ligne 67: | ||
val films = melange.map(_.split("," | val films = melange.map(_.split("," | ||
</ | </ | ||
- | </ | ||
==== Question 4 ==== | ==== Question 4 ==== | ||
Ligne 94: | Ligne 90: | ||
- | <showif isloggedin> | ||
**Réponse** | **Réponse** | ||
<code scala> | <code scala> | ||
Ligne 102: | Ligne 97: | ||
val classes_personnes = personnes.map(x=> | val classes_personnes = personnes.map(x=> | ||
</ | </ | ||
- | </ | ||
- | ===== Exercice | + | ===== Exercice |
Commencer par copier et décompresser dans votre espace de travail le fichier | Commencer par copier et décompresser dans votre espace de travail le fichier | ||
Ligne 140: | Ligne 134: | ||
+ | **Réponse** | ||
+ | <code scala> | ||
+ | // | ||
+ | val q1 = data.map(x=> | ||
- | ===== Exercice subsidiaire ===== | + | // |
- | ==== Conversion d'un objet List en un objet Map ==== | + | val q2 = q1.filter(x=> x>1000 && x< |
- | Expliquer l' | + | |
- | <code scala> | + | |
- | val x = List((" | + | |
- | val x = List((22, " | ||
- | </code> | + | // |
+ | val q33 = q2.filter(x=> | ||
+ | val q39 = q2.filter(x=> | ||
- | ==== Illustration du flatMap ==== | + | // |
- | Expliquer la différence entre les expressions | + | val q4 = q33.map(x=> |
- | <code scala> | + | //5. Construire à partir de q4 un ensemble d’éléments |
- | val x = List(1, 2, 3).map(x => List(x, 10*x, 100*x) | + | |
- | val x = List(1, 2, 3).flatMap(x => List(x, 10*x, 100*x)) | + | |
- | val y = List(List((1, | + | val q5 = q4.distinct |
- | val y = List(List((1, | + | |
- | </ | ||
- | <code scala> | + | //6. Construire à partir de q2 une liste contenant ses qui sont multiples de 3 et de 9 à la fois. Utiliser impérativement q33 et q39. |
- | val ys = Map(" | + | |
- | </ | + | |
- | Attention, le flatMap appliqué sur une Map retourne une Map. Pour garantir l' | + | val q6 = q33.intersection(q39) |
- | <code scala> | + | |
- | val ys = Map(" | + | |
- | </ | + | |
- | La fonction passée en paramêtre au flatMap doit retourner une séquence. Ici une chaine de caractère est considérée implicitment comme une séquence de caractères. | ||
- | <code scala> | ||
- | val pers = Array( (1," | ||
- | val v = pers.flatMap(x=> | ||
- | val v = pers.flatMap{ case(numéro, | ||
+ | // | ||
+ | |||
+ | val q7 = q33.subtract(q39) | ||
+ | |||
+ | // | ||
+ | |||
+ | val q8 = q33.union(q2.filter(x=> | ||
+ | |||
+ | // | ||
+ | |||
+ | val q9sum = q8.map(x=> | ||
+ | |||
+ | val q9max = q8.map(x=> | ||
+ | |||
+ | val q9min = q8.map(x=> | ||
+ | |||
+ | val q9avg = q8.map(x=> | ||
+ | |||
+ | q9avg._1/ | ||
</ | </ | ||
- | ==== Composition de Map ==== | ||
- | En considérant la variable pers de la question précédente, | ||
- | * pers.flatMap(x=> | ||
- | * pers.flatMap(x=> | ||
- | * pers.flatMap(x=> | ||
- | et expliquer pourquoi les deux instructions suivantes sont erronées | ||
- | * pers.flatMap(x=> | ||
- | * pers.flatMap(x=> |
site/enseignement/master/bdle/tmes/tme3-scala.1507714568.txt.gz · Dernière modification : de amine