présentation - Rendez-vous Méthodes et Logiciels
Transcription
présentation - Rendez-vous Méthodes et Logiciels
Rendez-vous SFDS Méthodes et Logiciel Jeudi 7 avril 2016 Outils pour la Data Science Spark Anne GAYET [email protected] AID: EXPERT DEPUIS 40 ANS DE L’ANALYSE ET VALORISATION DES DATA CLIENTS CRM Services 30 BDD marketing B2B, B2C 200M de clients 5 milliards de transactions Référentiels client unique Data Quality Data Visualisation Datakili® Datamining & Textmining Webmining Segmentation Scoring Plans Tests Clients en partance Pression Commerciale Chez vous Conseil et cadrage projets Marketing & Fidélisation Big data, Gestion de projet Plate-forme SaaS Datalake Analyse parcours clients Data Lab’ Outils big data Tracking de tweets Nuages de mots intelligents / interactifs Enrichissement profils client à partir de verbatims En mode hébergé AID Academy Outils Séminaires découverte Méthodes SPARK – 100% OPEN SOURCE ET MATURE Né en 2009, devenu « top level project Apache » en 2014 Plateforme datakili® Utilisé en production par de nombreuses entreprises de tout type En test ou PoT dans de nombreuses entreprises françaises Utilisé chez AID dans une plateforme qui intègre, visualise et analyse les parcours clients cross canaux SFDS 7/4/2016 Anne GAYET 3 2015: UNE GRANDE ANNÉE POUR SPARK SFDS 7/4/2016 Anne GAYET 4 SPARK, LES GRANDS PRINCIPES Moteur de calcul distribué, mais pas de stockage Fonctionne in-memory beaucoup plus rapide qu’Hadoop / MapReduce qui travaille sur les disques API pour scripts Java, Scala, Python, R (récemment) Bibliothèques pour SQL, flux temps réel, machine learning, … Utilisé seul (avec un système de fichier) ou intégré à Hadoop, Cassandra, MongoDB, … SFDS 7/4/2016 Anne GAYET 5 RAPIDE COMMENT ? Time to sort 100TB 2013 Record: Hadoop 2100 machines 72 minutes 2014 Record: Spark 207 machines Source: Daytona GraySort benchmark, sortbenchmark.org 23 minutes SFDS 7/4/2016 Anne GAYET 6 DataFrames API Spark SQL Spark Streaming MLlib GraphX RDD API Spark Core Data Sources {JSON} SFDS 7/4/2016 Anne GAYET 7 LES FORMATS DANS SPARK: LES RDD Le format « de base » des données dans Spark, c’est le RDD (Resilient Distributed Dataset) il permet de gérer des ensembles de (clé, valeur) distributed: RAS resilient: peut être partiellement relu si problème Soit la distribution se fait « par défaut », soit on la contrôle si on a l’intention de faire des join ou groupeby, mieux vaut contrôler SFDS 7/4/2016 Anne GAYET 8 LES ÉTAPES D’UN TRAITEMENT EN SPARK il y a les transformations: prend un RDD fait la transfo sort un RDD il y a les actions: prend un RDD sort une valeur fonctionnement: « lazy transformation » ou « évaluation paresseuse » 1) on prévoit les transformations, elles restent en attente 2) c’est la réalisation d’une action qui commande la réalisation des transformations SFDS 7/4/2016 Anne GAYET 9 EXEMPLE EN SCALA exemple scala> val texteLicence = sc.textFile("file:///home/cloudera/tpintro/LICENSE") scala> val longueursLignes = texteLicence.map(l => l.length) scala> longueursLignes.reduce((a, b) => a + b) Les données ne sont pas chargées en mémoire après la première ligne, longueursLignes n’est pas construit immédiatement après la transformation map de la seconde ligne, ce n’est qu’au moment où l’action reduce doit être exécutée que Spark partitionne les calculs à faire en tâches pour les différentes machines (et/ou cœurs) et chaque machine (et/ou cœur) exécute sa partie de map et de reduce, avant de retourner la réponse pour en savoir plus http://cedric.cnam.fr/vertigo/Cours/RCP216/tpSparkScala.html SFDS 7/4/2016 Anne GAYET 10 LES FORMATS DANS SPARK: LES DATAFRAMES DataFrame, à ne pas confondre avec les data frame de R Correspond à une « table » avec des champs On peut « faire » du Spark SQL dessus ! Error, ts, msg1 Warn, ts, msg2 Error, ts, msg1 RDD Info, ts, msg8 Warn, ts, msg2 Info, ts, msg8 Error, ts, msg3 Info, ts, msg5 Info, ts, msg5 Error, ts, msg4 Warn, ts, msg9 Error, ts, msg1 4 partitions Data Frame Type Time Msg Type Time Msg Type Time (Int) (Str) Msg Type (Str) (Str) (Int) (Str) Time Msg (Str) (Int) (Str) (Str) (Int) (Str) Error Warn Error ts ts ts Info Warn Error ts ts ts Warn Warn Info ts ts ts msg0 msg2 msg11 Error Error Error ts ts ts SFDS 7/4/2016 msg1 msg2 msg1 Anne GAYET msg7 msg2 msg9 msg1 msg3 msg1 11 DES API PERMETTENT DE LIRE ET ÉCRIRE DES DATAFRAMES … avec de nombreuses sources de données { JSON } JDBC etc … voir http://spark-packages.org SFDS 7/4/2016 Anne GAYET 12 12 ALGORITHMES DE SPARK MLLIB Basic statistics summary statistics correlations stratified sampling hypothesis testing streaming significance testing random data generation Dimensionality reduction singular value decomposition (SVD) principal component analysis (PCA) Clustering k-means Gaussian mixture power iteration clustering (PIC) latent Dirichlet allocation (LDA) bisecting k-means streaming k-means SFDS 7/4/2016 Anne GAYET Collaborative filtering alternating least squares (ALS) Classification and regression linear models (SVMs, logistic regression, linear regression) naive Bayes decision trees ensembles of trees (Random Forests and Gradient-Boosted Trees) isotonic regression Feature extraction and transformation Frequent pattern mining FP-growth déjà un algo de séquences association rules fréquentes ! ça va vite … PrefixSpan Evaluation metrics pour échanger des modèles PMML model export avec d’autres logiciels de Optimization (developer) datamining stochastic gradient descent limited-memory BFGS (L-BFGS) 13 SPARKR le dernier né (juin 2015) avec Spark 1.4 Spark utilisable depuis Rstudio dplyr-like select, $, where, filter groupBy, summarize, arrange …. création de data frames: read.df, write.df mixe possible avec du SQL SFDS 7/4/2016 Anne GAYET 14 SPARKR: EXEMPLE # Loading distributed data df <- read.df(“hdfs://bigdata/logs”, source = “json”) # Distributed filtering and aggregation errors <- subset(df, df$type == “error”) counts <- agg(groupBy(errors, df$code), num = count(df$code)) # Collecting and plotting small data qplot(code, num, data = collect(counts), geom = “bar”, stat = “identity”) + coord_flip() # Register DataFrame as a table registerTempTable(df, “dataTable”) # Complex SQL query, result is returned as another DataFrame aggCount <- sql(sqlContext, “select count(*) as num, type, date group by type order by date desc”) qplot(date, num, data = collect(aggCount), geom = “line”) source Enabling exploratory data science with Spark and R , Databricks SFDS 7/4/2016 Anne GAYET 15 SPARK STREAMING c’est du micro-batch: le flux continu est découpé en petits lots lots input data stream spark streaming lots output spark découpage temporel (intervalle de temps) système de fenêtres glissantes pour pouvoir traiter plusieurs lots ensemble fenêtres aux temps 1-3-5 …. cumuls de 3 tous les 2 intervalles SFDS 7/4/2016 Anne GAYET 16 VERSIONNING FRÉQUENT comptage sur les clients de databricks 2002 – MapReduce @ Google 2004 – MapReduce paper 2006 – Hadoop @ Yahoo 2008 – Hadoop Summit 2010 – Spark paper 2011 – Hadoop 1.0 GA 2014 – Apache Spark top-level 2014 – 1.2.0 release in December 2015 – 1.3.0 release in March 2015 – 1.4.0 release in June 2015 – 1.5.0 release in September 2016 – 1.6.0 release in January 2016 – major release in April / May SFDS 7/4/2016 Anne GAYET 17 Démo Spark-scala L’ENVIRONNEMENT On est dans une VM (virtual machine), le système d’exploitation est Ubuntu on fait donc « comme si » on était sur un cluster On va utiliser du code Scala dans Spark, langage plus concis que le java On utilise la « surcouche » Zeppelin pour rendre Spark plus agréable : c’est un peu comme Rstudio pour R sinon c’est du spark-shell (un peu comme DOS dans le temps) on peut ainsi mettre des titres, des commentaires, et faire des visualisations simples on appelle ça un « notebook » SFDS 7/4/2016 Anne GAYET 19 OBJECTIF = REPRÉSENTATION DES PARCOURS LES PLUS PROBABLES ici parcours = visites sur un site web en vert le tunnel d’achat pages ramenant à la home ici la sortie (volontairement ajoutée comme page) en rose les consultations produits zone « institutionnelle » services / retour SFDS 7/4/2016 Anne GAYET 20 PARCOURS LES PLUS PROBABLES = ENCHAINEMENT DE « CHAÎNONS » ORIGINE VERS DESTINATION LA PLUS PROBABLE DEPUIS CETTE ORIGINE Etape 1 : reconstitution des séquences = parcours complets = visites Etape 2 : construction des paires de pages consécutives Etape 3 : comptage des pages et des paires de pages Etape 4 : calcul des probabilités de transition Etape 5 : calcul des probabilités max, identification des « chaînons » Représentation des parcours les plus probables (hors Spark) SFDS 7/4/2016 Anne GAYET 21