Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Codeurs en Seine - Hands-on Spark

Codeurs en Seine - Hands-on Spark

Support du hands-on Spark animé à Codeurs en Seine le 26 novembre 2015.

Alexis Seigneurin

November 26, 2015
Tweet

More Decks by Alexis Seigneurin

Other Decks in Technology

Transcript

  1. Hands-On
    Alexis Seigneurin
    @aseigneurin
    Antoine Hars
    @antoine_hars

    View Slide

  2. @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

    View Slide

  3. @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

    View Slide

  4. Spark

    View Slide

  5. @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

    View Slide

  6. @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

    View Slide

  7. @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()

    View Slide

  8. @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

    View Slide

  9. @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

    View Slide

  10. @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|
    ...

    View Slide

  11. @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|
    +----+----------+--------+

    View Slide

  12. TP
    Exploration de données

    View Slide

  13. @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

    View Slide

  14. @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

    View Slide

  15. Machine Learning

    View Slide

  16. @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é

    View Slide

  17. @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

    View Slide

  18. @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

    View Slide

  19. @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

    View Slide

  20. @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

    View Slide

  21. TP
    Machine Learning

    View Slide

  22. @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 ?

    View Slide

  23. @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

    View Slide

  24. Ce qu’il faut retenir

    View Slide

  25. @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

    View Slide

  26. Questions?
    Comments?
    http://www.ippon.fr
    [email protected]
    @ippontech

    View Slide

  27. PARIS
    BORDEAUX
    NANTES
    WASHINGTON DC
    NEW-YORK
    RICHMOND
    [email protected]
    www.ippon.fr - www.ippon-hosting.com - www.ippon-digital.fr
    @ippontech
    -
    01 46 12 48 48

    View Slide