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. @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
  2. @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
  3. @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
  4. @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
  5. @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()
  6. @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
  7. @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
  8. @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| ...
  9. @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| +----+----------+--------+
  10. @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
  11. @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
  12. @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é
  13. @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
  14. @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
  15. @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
  16. @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
  17. @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 ?
  18. @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
  19. @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
  20. 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