Slide 1

Slide 1 text

Hands-On Alexis Seigneurin @aseigneurin Antoine Hars @antoine_hars

Slide 2

Slide 2 text

@aseigneurin - @antoine_hars ● 2 heures pour découvrir Spark et être à l’aise avec l’API ● 2 TP : ➔ Data exploration ➔ Machine Learning ● Outils ➔ Spark 1.5 ➔ Zeppelin (notebook Spark) ➔ Scala Vue d’ensemble de ce Hands-on

Slide 3

Slide 3 text

@aseigneurin - @antoine_hars ● En parallèle, copie des fichiers de la clef USB sur vos portables : ➔ La VM VirtualBox (contient l’environnement de développement et les instructions) ➔ Option : Le binaire VirtualBox correspondant à votre plateforme (v4.3, 64 bits) ➔ Ces slides ● Pour importer la VM, double-cliquer sur le fichier Spark Hands On.ova Organisation du Hands-on ✱ Points importants ● Libérer un maximum de ressources CPU et RAM pour la VM ● Configuration attendue ○ HDD: 5+ Go ○ RAM: 4+ Go ○ CPU: 4+ cores

Slide 4

Slide 4 text

Spark

Slide 5

Slide 5 text

@aseigneurin - @antoine_hars Apache Spark ● Framework pour le traitement de gros volumes de données ● Traitement distribué sur du “commodity hardware” ● Ecrit en Scala, bindings disponibles pour Java, Python et R ● Intègre des algorithmes de Machine Learning

Slide 6

Slide 6 text

@aseigneurin - @antoine_hars ● Spark s’intègre avec la majorité des systèmes déjà en place ○ Stockage de données : HDFS ○ Management de cluster : Yarn, Mesos ○ Election de master : Zookeeper ○ Bases de données NoSQL : Cassandra, Elasticsearch, Riak ○ Notebooks : Zeppelin, Spark Notebook, Jupyter Integration dans l’éco-système Big Data

Slide 7

Slide 7 text

@aseigneurin - @antoine_hars Les RDDs ● Représentation de la donnée : les RDDs ○ Resilient Distributed Dataset ○ Collection d’objets distribués et immutables ○ Tolérance à la panne ● On applique des Transformations et des Actions ○ Les Transformations sont lazy et retournent des RDDs expl : map(), filter(), reduceByKey() ○ Les Actions appliquent les Transformations sur les RDDs et ne retournent pas de RDDs expl : count(), foreach(), collect()

Slide 8

Slide 8 text

@aseigneurin - @antoine_hars Les RDDs : exemple ● Fichier CSV des arbres de Paris geom_x_y;circonfere;adresse;hauteurenm;espece;varieteouc;dateplanta 48.8648454814, 2.3094155344;140.0;COURS ALBERT 1ER;10.0;Aesculus hippocastanum;; 48.8782668139, 2.29806967519;100.0;PLACE DES TERNES;15.0;Tilia platyphyllos;; 48.889306184, 2.30400164126;38.0;BOULEVARD MALESHERBES;0.0;Platanus x hispanica;; 48.8599934405, 2.29504883623;65.0;QUAI BRANLY;10.0;Paulownia tomentosa;;1996-02-29 ... ● Exemple de comptage des arbres de Paris par espèce val sc = new SparkContext("local", "arbres") sc.textFile("data/arbresalignementparis2010.csv") .filter(line => !line.startsWith("geom")) .map(line => line.split(";", -1)) .map(fields => (fields(4), 1)) // creates a Tuple2 .reduceByKey(_+_) .sortByKey() .foreach(t => println(t._1 + " : " + t._2)) Output: Acacia dealbata : 2 Acer acerifolius : 33 Acer angustifolia : 3 Acer buergerianum : 14 Acer campestre : 509 Acer cappadocicum : 113 Acer freemanii : 11

Slide 9

Slide 9 text

@aseigneurin - @antoine_hars ● Dataframe ≈ RDD + Schéma des colonnes ○ Collection de données structurées distribuée et immutable ○ Abstraction de plus haut niveau que les RDDs ● Manipulation des données via un built-in DSL ○ select(), where(), groupBy() ○ show(), printSchema() (affichage dans la console) ○ drop(), agg(), withColumn(), explode(), join() ○ sortBy(), orderBy() Les Dataframes

Slide 10

Slide 10 text

@aseigneurin - @antoine_hars Les Dataframes : exemples ● Exemple de comptage des arbres de Paris par espèce val sqlContext = new SQLContext(sc) val df = sqlContext.read.format("com.databricks.spark.csv") .option("header", "true") .option("delimiter", ";") .option("inferSchema", "true") .load("data/arbresalignementparis2010.csv") df.where(df("genre_lati") !== "") .groupBy("genre_lati").count() .sort("genre_lati") .show() Output : +-----------+-----+ | genre_lati|count| +-----------+-----+ | Acer| 216| | Aesculus| 838| | Ailanthus| 19| | Albizzia| 7| | Alnus| 28| |Amelanchier| 3| | Carpinus| 69| | Catalpa| 9| ...

Slide 11

Slide 11 text

@aseigneurin - @antoine_hars Des méthodes utiles pour les TPs df.agg(avg("hauteur_m")) df.withColumn("genre_lati_lower", functions.lower(df("genre_lati"))) def myCity(): String = "Paris" df.withColumn("city", functions.udf(myCity _).apply()) val df: DataFrame = ??? df.explode("categories", "category") { categories: String => categories.split(",") } ● L’aggrégation via agg() ● L’ajout de colonnes via withColumn() ● L’utilisation d’UDF pour appliquer une fonction à une Column ● L’explosion d’un record comme : +----+----------+ |book|categories| +----+----------+ | A1| a1,a2,a3| | B1| b1,b2| +----+----------+ +----+----------+--------+ |book|categories|category| +----+----------+--------+ | A1| a1,a2,a3| a1| | A1| a1,a2,a3| a2| | A1| a1,a2,a3| a3| | B1| b1,b2| b1| | B1| b1,b2| b2| +----+----------+--------+

Slide 12

Slide 12 text

TP Exploration de données

Slide 13

Slide 13 text

@aseigneurin - @antoine_hars Exploration de données ● Exploration de données de musique : ➔ Fichier des artistes et groupes : /data/music/performers.csv ➔ Fichier des albums : /data/music/albums.csv ➔ Fichier des notes : /data/music/artists_ratings.csv ● Manipulation de DataFrames ➔ http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.DataFrame

Slide 14

Slide 14 text

@aseigneurin - @antoine_hars ● Zeppelin : un notebook pour Spark ➔ Code en Scala ➔ Affichage de tableaux et graphiques ● Pour travailler : ➔ Lancer la VM ➔ Accéder à http://localhost:8081 dans votre navigateur ➔ Ouvrir le notebook “Music” ➔ Suivre les instructions ➔ Shift+Enter pour exécuter le code ● Durée : 1h20 Exploration de données

Slide 15

Slide 15 text

Machine Learning

Slide 16

Slide 16 text

@aseigneurin - @antoine_hars Le Machine Learning ● Permet de faire des prédictions sur de nouvelles données en apprenant depuis d’autres existantes ○ Le process d’apprentissage permet de générer un modèle ○ Ce modèle peut être appliqué sur les nouvelles données ● Différents types ○ prédiction de valeurs (régression) ○ classification (binaire ou classes multiples) ○ moteurs de recommandation ○ clusterisation ○ autres... ● 2 types d’algorithmes : ○ Ceux à apprentissage supervisé ○ et les autres à apprentissage non-supervisé

Slide 17

Slide 17 text

@aseigneurin - @antoine_hars Supervisé vs non-supervisé ● Dans le cas d’un apprentissage supervisé, ○ On dispose dans nos données ■ d’un Label : la valeur qui doit être déterminée ■ et de Features : les valeurs qui expliquent la valeur label ○ Le but est de prédire le Label de nouvelles données ● Dans le cas d’un apprentissage non-supervisé ○ On ne dispose que de Features ○ Exemple : construction de clusters de points basés sur les similarités

Slide 18

Slide 18 text

@aseigneurin - @antoine_hars Le Workflow d’un process de Machine Learning 1. Nettoyage des données brutes 2. Définition des Features 3. Génération d’un modèle de Machine Learning a. Découpage du dataset en datasets d’apprentissage/validation/test b. Génération du modèle 4. Application du modèle sur de nouvelles données

Slide 19

Slide 19 text

@aseigneurin - @antoine_hars Spark ML & MLlib ● Librairie de Machine Learning ● Algorithmes implémentés en utilisant les spécificités de Spark: ○ Partitioning des données ○ Processing itératif exécuté en mémoire ● Optimisés pour d’importants volumes de données ● La différence entre MLlib & ML ○ MLlib ■ manipule des RDDs ■ laisse une approche libre pour la mise en oeuvre des algorithmes ○ ML ■ abstraction de plus haut niveau que les MLlib ■ permet la description de pipelines

Slide 20

Slide 20 text

@aseigneurin - @antoine_hars Spark ML ● Pour faire du Machine Learning avec Spark ML, il faut 1. Charger les données dans un DataFrame 2. Faire du nettoyage dans les données 3. Faire du “feature engineering” pour rendre les données compatibles avec les algorithmes de ML a. conversions spécifiques / StringIndexer / VectorAssembler 4. Découper les données en données d’entrainement & en données de test a. df.randomSplit() 5. Instancier l’algorithme et définir ses paramètres 6. Appeler la méthode fit() sur le jeu de données d’entrainement pour obtenir un modèle de Machine Learning 7. Appeler la méthode transform() pour faire des prédictions sur le jeu de données de test

Slide 21

Slide 21 text

TP Machine Learning

Slide 22

Slide 22 text

@aseigneurin - @antoine_hars Machine Learning ● Données du Titanic : ➔ Jeu d’entrainement (avec labels) : /data/titanic/train.csv ➔ Jeu de test (sans labels) : /data/titanic/test.csv ➔ Labels du jeu de test : /data/titanic/gendermodel.csv ● Liste des passagers + indication s’ils ont survécu ● Peut-on prédire si un passager va survivre au naufrage ?

Slide 23

Slide 23 text

@aseigneurin - @antoine_hars Machine Learning ● Pour travailler : ➔ Ouvrir le notebook “Titanic” ➔ Les opérations de Data Cleansing, Feature Engineering et construction du Pipeline sont déjà écrites ○ → Analyser le code ➔ Les étapes d’entrainement du modèle et de prédiction sont à écrire ○ → Compléter le code ➔ Visualiser ensuite les prédictions et les comparer aux résultats attendus ● Durée : 20 minutes

Slide 24

Slide 24 text

Ce qu’il faut retenir

Slide 25

Slide 25 text

@aseigneurin - @antoine_hars ● Spark, un framework complet : ➔ Une API riche (privilégier les DataFrames) ➔ Adapté à la Data Science : ○ Librairie de Machine Learning ○ Support de Python et R ➔ Adapté à de larges volumes de données ● A combiner avec d’autres outils : ➔ Bases (No)SQL ➔ Notebooks (Zeppelin, Databricks Cloud…) A retenir

Slide 26

Slide 26 text

Questions? Comments? http://www.ippon.fr formation@ippon.fr @ippontech

Slide 27

Slide 27 text

PARIS BORDEAUX NANTES WASHINGTON DC NEW-YORK RICHMOND contact@ippon.fr www.ippon.fr - www.ippon-hosting.com - www.ippon-digital.fr @ippontech - 01 46 12 48 48