Bases de Données / Databases

Site Web de l'équipe BD du LIP6 / LIP6 DB Web Site

Outils pour utilisateurs

Outils du site


site:enseignement:master:bdle:tmes:tme3-scala

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
site:enseignement:master:bdle:tmes:tme3-scala [11/10/2017 11:48]
amine
site:enseignement:master:bdle:tmes:tme3-scala [01/10/2018 12:39] (Version actuelle)
amine
Ligne 1: Ligne 1:
-{{indexmenu_n>​2}}+{{indexmenu_n>​20}}
  
-====== [TME II-1]  Introduction à Scala  ====== +====== [Pré-requis]  Introduction à Scala  ====== 
-**Remarque générale :** Le cours ne peut être //​self-contained//​ --> consulter la documentation en ligne de Spark. +**Remarque générale :** Le cours ne peut être //​self-contained//​ --> consulter la documentation en ligne de [[https://​spark.apache.org/​docs/​2.1.1/​api/​scala/​index.html#​package|Spark]]
- +===== 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:
 </​code>​ </​code>​
  
-<showif isloggedin>​ 
 **Réponse** **Réponse**
 <code scala> <code scala>
Ligne 26: Ligne 27:
 def moyEntiers(in:​ List[Int])={val p = in.map(e=>​(1,​e)).reduce((a,​b)=>​(a._1+b._1,​ a._2+b._2));​ p._2/p._1} def moyEntiers(in:​ List[Int])={val p = in.map(e=>​(1,​e)).reduce((a,​b)=>​(a._1+b._1,​ a._2+b._2));​ p._2/p._1}
 </​code>​ </​code>​
-</​showif>​ 
  
 ==== 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)
 </​code>​ </​code>​
-</​showif>​ 
  
  
Ligne 64: Ligne 62:
  
  
-<showif isloggedin>​ 
 **Réponse** **Réponse**
 <code scala> <code scala>
Ligne 70: Ligne 67:
 val films = melange.map(_.split(","​)).filter(_(0).toInt<​=100).map(x=>​(x(0).toInt,​x(1),​ x(2))) val films = melange.map(_.split(","​)).filter(_(0).toInt<​=100).map(x=>​(x(0).toInt,​x(1),​ x(2)))
 </​code>​ </​code>​
-</​showif>​ 
  
 ==== 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=>​ x match { case(a,"​ens",​b) =>new Ens(a,b); case(a, "​etu",​ b) =>new Etu(a,b); case _=>​None}).filter(_!=None) val classes_personnes = personnes.map(x=>​ x match { case(a,"​ens",​b) =>new Ens(a,b); case(a, "​etu",​ b) =>new Etu(a,b); case _=>​None}).filter(_!=None)
 </​code>​ </​code>​
-</​showif>​ 
  
  
-===== Exercice ​1 : Spark =====+===== 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>
 +//​1. Extraire dans une variable appelée listEnt le 4e champ de chaque élément de data.
 +val q1 = data.map(x=>​x.split("​ "​)).map(x=>​x(3).toDouble)
  
 +
 +//​2. Construire à partir de q1 une liste contenant les nombres compris strictement entre 1000 et 1300 puis convertir en type entier.
 +
 +val q2 = q1.filter(x=>​ x>1000 && x<1300 )map(x=>​x.toInt)
 +
 +
 +//​. Construire à partir de q2 une liste contenant les multiples de 3 et l’appeler q33. Faire
 +
 +val q33 = q2.filter(x=>​x%3==0)
 +val q39 = q2.filter(x=>​x%9==0)
 +
 +//​4. Construire une liste obtenue en divisant par 10 chaque élément de q33.
 +
 +val q4 = q33.map(x=>​x/​10)
 +
 +//​5. Construire à partir de q4 un ensemble d’éléments (liste sans doublons).
 +
 +val q5 = q4.distinct
 +
 +
 +//​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 q6 = q33.intersection(q39)
 +
 +
 +//​7. Construire à partir de q2 une liste contenant ses éléments qui sont multiples de 3 mais pas de 9. Utiliser impérativement q33 et q39. 
 +
 +val q7 = q33.subtract(q39)
 +
 +//​8. Construire à partir de q2 une liste contenant ses  éléments qui sont multiples de 3 ou de 10.
 +
 +val q8 = q33.union(q2.filter(x=>​x%3==0))
 +
 +//​9. Calculer la somme, ​ la moyenne, le minium ainsi que le maximum des éléments de q8. 
 +
 +val q9sum = q8.map(x=>​x.toDouble).reduce(_+_)
 +
 +val q9max = q8.map(x=>​x.toDouble).reduce((x,​y)=>​if (x > y) x else y)
 +
 +val q9min = q8.map(x=>​x.toDouble).reduce((x,​y)=>​if (x < y) x else y)
 +
 +val q9avg = q8.map(x=>​(x,​1)).reduce((x,​y)=>​(x._1+y._1,​x._2+y._2))
 +
 +q9avg._1/​q9avg._2
 +</​code>​
  
site/enseignement/master/bdle/tmes/tme3-scala.1507715310.txt.gz · Dernière modification: 11/10/2017 11:48 par amine