Big Data Analytics
Plan
• Big Data Analytics
• Spark vs Hadoop
• Caractéristiques de Apache Spark
• Spark Ecosystème
• Installation de Spark
• Langage Scala
• Architecture et fonctionnement de Apache Spark
• API Spark: RDD, Dataframe, Dataset
• Spark SQL
• Spark ML
• Spark Streaming
2
Introduction
3
Big Data : Introduction
• le Big Data est composé de jeux de données complexes, provenant
essentiellement de nouvelles sources.
• Ces ensembles de données sont si volumineux qu’un logiciel de traitement de
données traditionnel ne peut tout simplement pas les gérer.
• Mais ces énormes volumes de données peuvent être utilisés pour résoudre des
problèmes que vous n’auriez jamais pu résoudre auparavant.
4
Big Data : Introduction
La quantité de données générées chaque minute par les leaders des médias sociaux.
5
Big Data : Introduction
• Domaines d’application
6
Big Data : Introduction
• Santé
- Analyse en temps réel pour vérifier en permanence l'état de santé des patients
critiques.
- Les hôpitaux à la recherche de greffes de sang et d'organes doivent rester en
contact en temps réel les uns avec les autres pendant les urgences.
- Obtenir des soins médicaux à temps est une question de vie ou de mort pour les
patients.
7
Big Data : Introduction
• Gouvernement :
- Analyses en temps réel principalement dans le domaine de la sécurité nationale.
- Les pays doivent garder en permanence une trace de toutes les agences militaires
et policières pour les mises à jour concernant les menaces.
• Télécommunications :
- Analyse en temps réel pour réduire le taux de désabonnement des clients et garder
une vision sur la concurrence.
- Améliorer l'expérience client à l’aide de l’extraction des mesures de performance
des réseaux mobiles.
8
Big Data : Introduction
• Bancaire :
- Garantir des transactions tolérantes aux pannes sur l'ensemble du système.
- La détection des fraudes
• Marché boursier :
- Besoins de prédire le mouvement des portefeuilles d'actions.
- Les entreprises repensent leur modèle commercial après avoir utilisé des analyses
en temps réel pour analyser la demande du marché.
9
Besoin de l’Analyse de données
1. Analyse Descriptive
- Consiste à examiner le passé pour mieux comprendre l'avenir.
- Utilise les données des exercices précédents pour tirer des conclusions sur le fonctionnement
actuel et futur d'une entreprise.
Exemple: Ce type d'analyse est utilise pour obtenir des prospects de vente et suivre les
indicateurs de performance clés (KPI).
2. Analyse Diagnostique
- Consiste à comprendre pourquoi un évènement s'est produit, qu'il soit positif ou négatif,
afin de comprendre comment il s'est produit.
- Les entreprises peuvent prendre des mesures préventives ou reproduire le processus.
Exemple: identifier les bombages ou les hausses des ventes afin d'aider les entreprises a
utiliser les stratégies marketing appropriées à l'avenir.
10
Besoin de l’Analyse de données
3. Analyse Prédictive
- Cherche à se tourner vers l'avenir, généralement en utilisant des données descriptives.
- Utiliser des statistiques et des chiffres antérieurs pour prédire ce qui se passera au
cours de l'année a venir.
Exemple:
- Prévoir des tendances du marché aux revenus courants.
- En regardant vers l'avenir, les entreprises peuvent également évaluer les risques
potentiels dans la chaine d'approvisionnement avant que des problèmes ne surviennent.
11
Besoin de l’Analyse de données
4. Analyse Prescriptive
- Le plus complet des quatre types d'analyse de données.
- La méthode d'analyse prescriptive combine des éléments issus des modèles
descriptifs, diagnostiques et prédictifs pour permettre aux entreprises de formuler
des plans axes sur les données.
- Au cours de ce processus, les entreprises cherchent a créer des informations
exploitables qui auront un impact positif sur les décisions et l'orientation de
l'entreprise.
12
Apache Spark
13
Apache Spark
- Apache Spark est une infrastructure de traitement parallèle open source qui permet
d'exécuter des applications analytiques, en utilisant des machines en clusters.
- La gestion du cluster de machines peut être déléguée soit au cluster manager de Spark, soit
à Yarn ou à Mesos (d’autres gestionnaires pour Hadoop).
- Spark est l'outil incontournable pour l'analyse de données en temps réel.
- Une plateforme extrêmement modulaire et flexible.
Traitement en temps réel dans Apache Spark
14
Apache Spark
- Apache Spark est une infrastructure de calcul en cluster open source pour le
traitement en temps réel .
- C'est l'un des projets les plus réussis de l'Apache Software Foundation.
- Spark a clairement évolué en tant que leader du marché du traitement du Big Data.
- Aujourd'hui, Spark est adopté par des acteurs majeurs comme Amazon, eBay et
Yahoo!
- De nombreuses organisations exécutent Spark sur des clusters avec des milliers de
nœuds
15
Caractéristiques d'Apache Spark
16
Caractéristiques d'Apache Spark
• Polyglotte :
- Spark fournit des API de haut niveau en Java, Scala, Python et R.
- Le code Spark peut être écrit dans l'un de ces quatre langages.
- Il fournit un shell en Scala et Python.
- Le shell Scala est accessible via ./bin/spark-shell et le shell Python via ./bin/pyspark à
partir du répertoire installé.
17
Caractéristiques d'Apache Spark
• Vitesse :
- Spark s'exécute jusqu'à 100 fois plus vite que Hadoop MapReduce pour le traitement de
données à grande échelle.
- Spark est capable d'atteindre cette vitesse grâce à un partitionnement contrôlé.
- Il gère les données à l'aide de partitions qui aident à paralléliser le traitement des données
distribuées avec un trafic réseau minimal
18
Caractéristiques d'Apache Spark
• Formats Multiples :
- Spark prend en charge plusieurs sources de données telles que Parquet, JSON, Hive et
Cassandra en plus des formats habituels tels que les fichiers texte, les tableaux CSV et
RDBMS.
- L'API de source de données fournit un mécanisme pour accéder aux données
structurées via Spark SQL.
- Les sources de données peuvent être plus que de simples canaux qui convertissent les
données et les extraient dans Spark.
19
Caractéristiques d'Apache Spark
• Calcul temps réel :
- Le calcul de Spark est en temps réel et a une faible latence en raison de
son calcul en mémoire.
- Spark est conçu pour une évolutivité massive.
20
Caractéristiques d'Apache Spark
• Intégration Hadoop :
- Apache Spark offre une compatibilité fluide avec Hadoop.
- C'est une aubaine pour tous les ingénieurs Big Data qui ont commencé leur
carrière avec Hadoop.
- Spark est un remplacement potentiel des fonctions MapReduce de Hadoop,
- Spark a la capacité de s'exécuter sur un cluster Hadoop en utilisant YARN pour
la planification des ressources.
21
Caractéristiques d'Apache Spark
• Apprentissage automatique
-MLlib de Spark est le composant d'apprentissage automatique lorsqu'il s'agit de traitement
de données volumineuses.
-Il élimine le besoin d'utiliser plusieurs outils, un pour le traitement et un pour
l'apprentissage automatique.
-Spark fournit aux ingénieurs et data scientists un moteur puissant et unifié, à la fois rapide
et facile à utiliser.
22
Caractéristiques d'Apache Spark
• Évaluation paresseuse :
- Apache Spark retarde son évaluation jusqu'à ce qu'elle soit absolument nécessaire.
- C'est l'un des facteurs clés qui contribuent à sa rapidité.
- Pour les transformations, Spark les ajoute à un DAG (Directed Acyclic Graph) de calcul et ce
n'est que lorsque le pilote demande des données que ce DAG est réellement exécuté.
23
Spark vs Hadoop ?
HADOOP
Traitement par lots (Batch)
Lent SPARK
Moins coûteux
Pas de traitement en temps réel
Tolérant au panne Traitement en lot et en temps réel
Evolutivité élevée 100 fois plus rapide en mémoire
Complexe 10 fois plus rapide sur le disk
Plus couteux
Tolérance au pannes (RDD)
API interactive : Java, scala, python
Facile
24
Spark vs Hadoop ?
25
Spark Eco-System
L'écosystème Spark est composé de divers composants tels que:
- Spark SQL
- Spark Streaming
- Mllib
- GraphX
- SPARK Core API.
26
Spark Eco-System
• Spark Core:
- Spark Core est le moteur de base pour le traitement de données parallèle et distribué à
grande échelle.
- Le core est le moteur d'exécution distribué
- Il est responsable de :
o Gestion de la mémoire et récupération des pannes
o Planification, distribution et surveillance des tâches sur un cluster
o Interagir avec les systèmes de stockage
27
Spark Eco-System
• Spark SQL :
- Un nouveau module de Spark qui intègre le traitement relationnel.
- Il prend en charge l'interrogation des données via SQL ou via le langage de requête Hive.
- Spark SQL intègre le traitement relationnel à la programmation fonctionnelle de Spark.
- De plus, il prend en charge diverses sources de données.
- Voici les quatre bibliothèques de Spark SQL .
o API de source de données
o API DataFrame
o Interprète & Optimiseur
o Service SQL
28
Spark Eco-System
29
Spark Eco-System
• Spark Streaming :
- Composant de Spark utilisé pour traiter les données de streaming en temps réel.
- Il permet un traitement de flux à haut débit et tolérant aux pannes des flux de
données en direct.
- L'unité de flux fondamentale est DStream qui est essentiellement une série de
RDD pour traiter les données en temps réel.
30
Spark Eco-System
• Spark MLLib est la librairie d'apprentissage automatique (Machine Learning) de
Spark.
• Son but est de rendre son utilisation facile et scalable.
• Elle fournit des outils tel que:
- Des algorithmes de machine learning classiques tel que la classification, régression,
clustering et filtrage collaboratif.
- L'extraction de caractéristiques (Features), transformation, réduction de dimensions
et sélection
- Les pipelines pour construire, évaluer et régler les pipelines ML.
- La persistence, pour sauvegarder et charger des algorithmes, modèles et pipelines.
- Des utilitaires tel que l'algèbre linéaire, statistiques, manipulation des données, etc
31
Spark Eco-System
• MlLib (apprentissage automatique)
32
Spark Eco-System
• GraphX
- GraphX est l'API Spark pour les graphes et le calcul parallèle aux graphes.
- Etend le Spark RDD avec un Resilient Distributed Property Graph.
- Le graphe de propriétés est un multigraphe orienté qui peut avoir plusieurs arêtes en
parallèle.
- Chaque arête et chaque sommet sont associés à des propriétés définies par l'utilisateur
33
Compatibilité avec Hadoop
La meilleure partie de Spark est sa compatibilité avec Hadoop.
• Il en résulte une combinaison de technologies très puissante.
• Les composants Hadoop peuvent être utilisés avec Spark de la manière suivante:
- HDFS: Spark peut s'exécuter sur HDFS pour tirer parti du stockage répliqué
distribué.
- MapReduce : Spark peut être utilisé avec MapReduce dans le même cluster
Hadoop ou séparément en tant que framework de traitement.
- YARN: les applications Spark peuvent être conçues pour s'exécuter sur YARN
(Hadoop NextGen).
- Batch & Real Time Processing: MapReduce et Spark sont utilisés ensemble,
MapReduce étant utilisé pour le traitement par lots et Spark pour le traitement en
temps réel.
34
Partie 2: Architecture Spark
35
Architecture Spark
• Apache Spark a une architecture en couches bien définie où tous les composants
Spark sont faiblement couplés.
• Cette architecture est en outre intégrée à diverses extensions et bibliothèques.
• L'architecture Apache Spark est basée sur deux abstractions principales
36
Architecture Spark
• Le programmeur envoie au framework des Spark Applications, pour lesquelles Spark
affecte des ressources (RAM, CPU) du cluster en vue de leur exécution.
• Une Spark application se compose d’un processus Driver et d'executors.
• Le driver est essentiel pour l’application car il exécute la fonction main() et est responsable
de 3 choses :
o Conserver les informations relatives à l’application ;
o Répondre aux saisies utilisateur ou aux demandes de programmes externes;
o Analyser, distribuer et ordonnancer les tâches.
37
Architecture Spark
• Un executor est responsable de 2 choses :
o Exécuter le code qui lui est assigné par le driver.
o Rapporter l’état d’avancement de la tâche au driver.
• Le driver est accessible par un point d’entrée appelé SparkSession, que l’on trouve
derrière une variable spark.
• Le code que l’utilisateur écrit se comporte
comme un Driver Program ou, si nous utilisons
le Shell interactif, le Shell agit comme Driver
Program.
38
Architecture Spark
39
Architecture Spark
• ETAPE 1:
- Le client soumet le code de Spark application.
- Le driver convertit implicitement le code utilisateur qui contient des transformations et des
actions en un Directed acyclic graph (DAG).
• ÉTAPE 2:
- Le Driver convertit le DAG en un plan d'exécution physique avec plusieurs étapes
(stages).
- Le driver crée des tâches sous chaque étape.
- Les tâches sont regroupées et envoyées au cluster.
40
Architecture Spark
• ÉTAPE 3 :
- Le driver communique avec le cluster manager et négocie les ressources.
- Le cluster manager lance des exécuteurs dans les nœuds de travail (worker nodes) au
nom du driver.
- Le driver enverra les tâches aux exécuteurs en fonction du placement des données.
- Lorsque les exécuteurs commencent, ils s'inscrivent auprès du driver. Le driver aura
une vue complète des exécuteurs qui exécutent la tâche.
41
Architecture Spark
• ETAPE 4 :
- Au cours de l'exécution des tâches, le driver program surveillera l'ensemble des
exécuteurs qui exécutent les taches.
- Le driver planifie également les tâches futures en fonction du placement des
données.
42
Installation de spark
1. Installation de Java 8
2. Configuration de variable d’environnement
3. Installation de Spark
- Créer un dossier nommé Spark sur votre C:drive
- Copier et extraire le fichier de spark
- Renommer le fichier spark3
4. Ajouter le fichier winutils.exe
- Ouvrir le lien URL https://github.com/cdarlint/winutils
- télécharger le fichier winutils.exe. Et placer le dans le dossier bin
de spark
43
Installation de spark
5. Configuration de variable d’envirennement
pour Spark et Hadoop
6. Ajouter le path: C:\...\bin
44
Installation de spark
7. Lancer Spark avec la commande: spark-shell :
45
Big Data Analytics
Plan
• Introduction
• Big Data Analytics
• Spark vs Hadoop
• Caractéristiques de Apache Spark
• Spark Ecosystème
• Fonctionnement de Apache Spark
• Installation de Spark
• API Spark: RDD, Dataframe, Dataset
• Spark SQl
• Spark ML
• Spark Streaming
2
Architecture Spark
• Apache Spark a une architecture en couches bien définie où tous les composants
Spark sont faiblement couplés.
• Cette architecture est en outre intégrée à diverses extensions et bibliothèques.
• L'architecture Apache Spark est basée sur deux abstractions principales: Master-
slave
3
Fonctionnement de Apache Spark
• Le programmeur envoie au framework des Spark Applications, pour lesquelles Spark
affecte des ressources (RAM, CPU) du cluster en vue de leur exécution.
• Une Spark application se compose d’un processus Driver et d'executors.
• Le driver est essentiel pour l’application car il exécute la fonction main() et est
responsable de 3 choses :
o Conserver les informations relatives à l’application ;
o Répondre aux saisies utilisateur ou aux demandes de programmes externes;
o Analyser, distribuer et ordonnancer les tâches.
4
Fonctionnement de Apache Spark
• Un executor est responsable de 2 choses :
o Exécuter le code qui lui est assigné par le driver.
o Rapporter l’état d’avancement de la tâche au driver.
• Le driver est accessible par un point d’entrée appelé SparkSession, que l’on trouve
derrière une variable spark.
• Le code que l’utilisateur écrit se comporte
comme un Driver Program ou, si nous utilisons
le Shell interactif, le Shell agit comme Driver
Program.
5
Fonctionnement de Apache Spark
6
Fonctionnement de Apache Spark
• ETAPE 1:
- Le client soumet le code de Spark application.
- Le driver convertit implicitement le code utilisateur qui contient des transformations et des
actions en un Directed acyclic graph (DAG).
- DAG dans Apache Spark est un ensemble d’étapes qui représente l’opération à appliquer sur le
RDD.
- Lorsqu'une action est appelée sur le RDD, Spark crée le DAG
• ÉTAPE 2:
- Le Driver convertit le DAG en un plan d'exécution physique avec plusieurs étapes (stages).
- Le driver crée des tâches sous chaque étape.
- Les tâches sont regroupées et envoyées au cluster.
7
Fonctionnement de Apache Spark
• ÉTAPE 3 :
- Le driver communique avec le cluster manager et négocie les ressources.
- Le cluster manager lance des exécuteurs dans les nœuds de travail (worker nodes) au
nom du driver.
- Le driver enverra les tâches aux exécuteurs en fonction du placement des données.
- Lorsque les exécuteurs commencent, ils s'inscrivent auprès du driver. Le driver aura
une vue complète des exécuteurs qui exécutent la tâche.
8
Fonctionnement de Apache Spark
• ETAPE 4 :
- Au cours de l'exécution des tâches, le driver program surveillera l'ensemble des
exécuteurs qui exécutent les taches.
- Le driver planifie également les tâches futures en fonction du placement des
données.
9
API SPARK
• Spark shell
- Le shell de Spark fournit un moyen simple d'apprendre l'API, ainsi qu'un outil puissant
pour analyser les données de manière interactive( spark-shell).
• Spark Session:
- Dans les versions antérieures de Spark, Spark Context était le point d'entrée de Spark.
- Pour toutes les autres API, nous devions utiliser des contextes différents.
- Pour le streaming, nous avions besoin de StreamingContext, pour SQL sqlContext et
pour hive HiveContext.
- Pour résoudre ce problème, SparkSession est entré en scène. Il s'agit essentiellement
d'une combinaison de SQLContext, HiveContext et du futur StreamingContext.
10
API SPARK
L’écosystème des API de Spark est hiérarchisé et comporte essentiellement 3
niveaux :
- les APIs bas-niveau, avec les RDDs (Resilient Distributed Dataset);
- les APIs de haut niveau, avec les Datasets, DataFrames et sql;
- les autres bibliothèques (Structured Streaming, Advanced Analytics, etc.).
11
API SPARK
• Data Sources:
- L'API de Data Sources fournit un mécanisme enfichable pour accéder aux données structurées via
Spark SQL.
- L'API de Data Sources est utilisée pour lire et stocker des données structurées et semi-structurées
dans Spark SQL.
- Les Data Sources peuvent être plus que de simples canaux qui convertissent les données et les
extraient dans Spark.
12
API SPARK
• RDD
- Resilient Distributed Dataset (RDD)
- Une structure de données fondamentale de Spark.
- C'est une collection immuable d'objets distribués.
- Chaque ensemble de données dans RDD est divisé en partitions logiques, qui peuvent être
calculées sur différents nœuds du cluster.
- Un RDD est une collection calculée à partir d’une source de données (par exemple une base de
données Cassandra, un flux de données, un autre RDD) et placée en mémoire RAM.
- Les RDD peuvent contenir n'importe quel type d'objets Python, Java ou Scala, y compris des
classes définies par l'utilisateur.
- Spark conserve l’historique des opérations qui a permis de constituer un RDD, et la reprise sur
panne s’appuie essentiellement sur la préservation de cet historique afin de reconstituer le RDD en
cas de panne.
13
API SPARK
• RDD
Les RDD sont les éléments constitutifs de toute application Spark. RDD signifie :
- Résilient : tolérant aux pannes et capable de reconstruire les données en cas de panne
- Distribué : données distribuées entre les multiples nœuds d'un cluster
- Dataset : collection de données partitionnées avec des valeurs
14
API SPARK
• Caractéristique du RDD:
o Données immutable
o Calcul en mémoire
o Tolérance au panne
o Evaluation paresseuse
o Données distribuées et structurées
o Peut être manipuler par plusieurs opération
o Persistance
o Multiples sources
15
API SPARK
• Création du RDD:
Il existe deux façons de créer des RDD
- Parallélisme: En parallélisant une collection existante dans votre programme de driver.
- Stockage externe: En référençant un ensemble de données dans un système de stockage externe, tel qu'un
système de fichiers partagé, HDFS, HBase, etc.
• Opération du RDD:
Avec les RDD, vous pouvez effectuer deux types d'opérations :
- Transformations: Ce sont les opérations qui sont appliquées pour créer un nouveau RDD.
- Actions: elles sont appliquées sur un RDD pour demander à Apache Spark d'appliquer le calcul et de renvoyer
le résultat au pilote
16
API SPARK
o Transformations:
- Un élément fondamental de la pratique de Spark réside dans l’immutabilité des collections, elles
ne peuvent être modifiées après leur création.
- Pour passer des données d’entrée à la sortie du programme, on devra penser une chaîne de
collections qui constitueront les étapes du traitement.
- La (ou les) première(s) collection(s) contien(nen)t les données d’entrée.
- Ensuite, chaque collection est le résultat de transformations sur les précédentes structures.
- Une transformation sélectionne, enrichit, restructure une collection, ou combine deux
collections.
17
API SPARK
o Transformations étroite
Tous les éléments requis pour calculer
les enregistrements dans une partition
unique résident dans la partition du RDD
parent.
Comme map et flatmap.
18
API SPARK
o Transformations étroite
19
API SPARK
o Transformation larges
Tous les éléments requis pour calculer
les enregistrements de la partition unique
peuvent résider dans de nombreuses
partitions du RDD parent. La partition
peut vivre dans de nombreuses partitions
du RDD parent.
Ici, nous avons besoin de faire du
shuffle.
Comme groupbyKey () et
reductionbyKey ().
20
API SPARK
o Transformation larges
21
API SPARK
• Actions:
- Par opposition aux transformations qui produisent d’autres RDD ou DataFrames,
les actions produisent des valeurs (pour l’utilisateur).
- L’évaluation des opérations en Spark est dite « évaluation paresseuse », car Spark attend le plus
possible pour exécuter le graphe des instructions de traitement.
- Plus précisément, une action déclenche l’exécution des transformations qui la précèdent.
- L’évaluation paresseuse (lazy evaluation) permet à Spark de compiler de simples transformations de
DataFrames en un plan d’exécution physique efficacement réparti dans le cluster.
25
API SPARK
• Actions
26
API SPARK
• Actions
27
API SPARK
• Actions
28
API SPARK
Persistance d’un RDD
o Chaque RDD persistant peut être stocké en utilisant un niveau de stockage différent, ce qui vous permet,
par exemple, de conserver l'ensemble de données sur le disque et en mémoire.
o Ces niveaux sont définis en passant un objet StorageLevel (Scala, Java, Python) à persist ().
o Les collections forment un graphe construit par application de transformations à partir de collections
stockées.
o S’il n’est pas marqué comme persistant, le RDD/DataFrame sera transitoire et ne sera pas conservé en
mémoire après calcul (c’est le cas des RDD 1 et 3 sur la figure). Sinon, il est stocké en RAM, et disponible
comme source de données pour d’autres transformations.
29
API SPARK
Persistance d’un RDD
• Si une panne affecte un calcul s’appuyant sur un fragment F de RDD persistant, il suffit de le
relancer à partir de F .
• Si une panne affecte un fragment de RDD non persistant, Spark ré-applique la chaîne de traitement
ayant constitué le RDD.
30
API SPARK
Persistance d’un RDD
31
API SPARK
Limitation des RDD
o Limitation des performances et surcharge de Garbage Collection (mémoire non utilisée
disponible).
o Traitement des données structurées
o RDD ne peut pas gérer les données structurées.
32
API SPARK
• L’interface Utilisateur SPARK (Spark UI)
33
API SPARK
• L’interface Utilisateur SPARK (Spark UI)
34
Spark: Langage Scala
39
Scala :Notions de Base
Langage de programmation créé en 2003 par Martin Odersky à l’EPFL
• Sortie de Scala 2.0 en 2006
• Lancement de Typesafe (Lightbend) en 2011
• Fonctionne sur la JVM et dans le navigateur
• Intersection de la programmation fonctionnelle et de la programmation orientée
objet
40
SCALA :Notions de Base
Expressions
o Les expressions sont des instructions calculables :
o les résultats des expressions sont affichés en utilisant println:
41
SCALA :Notions de Base
• Valeurs
Vous pouvez nommer les résultats des expressions à l'aide du mot val
Les valeurs ne peuvent pas être réaffectées
Le type d'une valeur peut être omis et déduit , ou il peut être explicitement indiqué :
42
SCALA :Notions de Base
• variables
- Les variables sont comme des valeurs, sauf que vous pouvez les réaffecter. Vous pouvez définir
une variable avec le mot var:
-Comme pour les valeurs, le type d'une variable peut être omis et déduit , ou il peut être
explicitement indiqué
43
SCALA :Notions de Base
• Blocs
- Vous pouvez combiner des expressions en les entourant de {}. Nous appelons cela un bloc.
- Le résultat de la dernière expression du bloc est également le résultat du bloc global :
• Les fonctions
- Les fonctions sont des expressions qui ont des paramètres et prennent des arguments.
- Vous pouvez définir une fonction anonyme (c'est-à-dire une fonction qui n'a pas de nom) qui
renvoie un entier donné plus un :
44
SCALA :Notions de Base
A gauche de => se trouve une liste de paramètres. À droite se trouve une expression impliquant les paramètres.
Vous pouvez également nommer les fonctions :
Une fonction peut avoir plusieurs paramètres :
Ou il peut n'avoir aucun paramètre:
45
SCALA :Notions de Base
• Méthodes
Les méthodes ressemblent et se comportent de manière très similaire aux fonctions, mais il existe
quelques différences essentielles entre elles.
Les méthodes sont définies avec le mot def, def est suivi d'un nom, d'une ou plusieurs listes de
paramètres, d'un type de retour et d'un corps :
• Une méthode peut prendre plusieurs listes de paramètres
Ou aucune liste de paramètres :
46
SCALA :Notions de Base
• Classes
Vous pouvez définir des classes avec le mot class , suivi de son nom et des paramètres du constructeur :
- Le type de retour de la méthode greet est Unit, ce qui signifie qu'il n'y a rien de significatif à retourner.
- Il est utilisé de la même manière void qu'en Java et en C. (Une différence est que, comme chaque
expression Scala doit avoir une certaine valeur, il existe en fait une valeur singleton de type Unit, écrite ().
Elle ne contient aucune information.)
- Vous pouvez créer une instance d'une classe avec le mot new :
47
SCALA :Notions de Base
• Classes de cas:
- Scala a un type spécial de classe appelé classe "cas".
- Par défaut, les instances des classes de cas sont immuables et elles sont comparées par
valeur (contrairement aux classes, dont les instances sont comparées par référence).
- Vous pouvez définir des classes de cas avec les mots case class :
- Vous pouvez instancier des classes de cas sans le mot new:
48
SCALA :Notions de Base
• Les instances des classes de cas sont comparées par valeur, et non par référence
49
SCALA :Notions de Base
• Method main
- La method main est le point entrée du programme.
- Java Virtual Machine a besoin de la méthode main qui prend un argument, un array de string.
50
TP 1: Concepts de base de Apache Spark
51
Plan
• Introduction
• Big Data Analytics
• Spark vs Hadoop
• Caractéristiques de Apache Spark
• Spark Ecosystème
• Fonctionnement de Apache Spark
• Installation de Spark
• API Spark: RDD, Dataframe, Dataset
• Spark SQL
• Spark ML
• Spark Streaming
1
API SPARK
• RDD
Les RDD sont les éléments constitutifs de toute application Spark. RDD signifie :
- Résilient : tolérant aux pannes et capable de reconstruire les données en cas de panne
- Distribué : données distribuées entre les multiples nœuds d'un cluster
- Dataset : collection de données partitionnées avec des valeurs
2
API SPARK:RDD
• Caractéristique du RDD: • Limitations du RDD
o Aucun moteur d'optimisation d'entrée
o Données immutable
Il ne peut pas utiliser les optimiseurs d'avance
o Calcul en mémoire Spark tels que l'optimiseur de catalyseur et le
o Tolérance au panne moteur d'exécution Tungsten.
o Evaluation paresseuse
o Se dégrade quand la mémoire est insuffisante
o Données distribuées
Le RDD se dégrade lorsqu'il n'y a pas assez de
o Peut être manipuler par plusieurs opération mémoire pour le stocker en mémoire ou disque.
o Persistance
o Multiples sources o Limitation des performances et surcharge de Garbage
Collection (mémoire non utilisée disponible).
o Traitement des données structurées
RDD ne peut pas gérer les données structurées
3
API SPARK: Dataframes
• DataFrames
o Comme un RDD, un DataFrame est une collection de données distribuée et immuable.
o Contrairement à un RDD, les données sont organisées en colonnes nommées, comme une table dans une base de
données relationnelle.
o L'API DataFrame est disponible en Scala, Java, Python et R.
o Un DataFrame peut être construit à partir de différentes sources telles que:
Tables Hive,
Fichiers de données structurées,
bases de données externes,
ou les RDD existants.
Dans Spark 2.0, les API DataFrame sont fusionnées avec les API DataSets, unifiant les capacités de traitement des
données dans les bibliothèques.
o En Scala et Java, un DataFrame est représenté par un DataSet de lignes.
Dans l'API Scala, DataFrame est simplement un alias de type de Dataset [Row].
Alors que, dans l'API Java, les utilisateurs doivent utiliser Dataset <Row> pour représenter un DataFrame.
4
API SPARK: Dataframes
Avantages des Dataframes
o Offre une amélioration considérable des performances par rapport aux RDD grâce à 2 fonctionnalités
puissantes:
Gestion de la mémoire personnalisée (aussi appelée Project Tungsten).
Les données sont stockées dans de la mémoire hors pile (mémoire dans la machine virtuelle Java)
non sujette à une surcharge de Garbage Collection.
o Plans d'exécution optimisés (aussi appelée Catalyst Optimizer):
Les dataframes sont converties en RDD.
Les requêtes sont optimisées pour de meilleures performances.
o C'est l'équivalent de tables relationnelles avec de bonnes techniques d'optimisation.
6
API SPARK: Dataframes
Limitations:
Sécurité de type au moment de la compilation: l'API Dataframe ne prend pas en charge la sécurité au moment
de la compilation, ce qui vous empêche de manipuler des données lorsque la structure n'est pas connue.
On peut Identifier les erreurs uniquement au moment de l'exécution et non lors de la compilation.
Exemple: L'exemple suivant fonctionne pendant la compilation. Cependant, vous obtiendrez une exception
lors de l'exécution de ce code.
case class Student(id : Int , name : String)
val dataframe =
sqlContext.read.json("student.json")
dataframe.filter( "age > 24").show
throws Exception : cannot resolve ‘age' given
input age , name
7
API SPARK: Dataframes vs Datasets
www.itabacademy.com 8
API SPARK: Datasets
o L'API DataSet est une extension de DataFrames.
o Les DateSets sont:
• type-safe,
• fortement typé,
• collection immuable d'objets
• mappés à un schéma relationnel.
o Un encodeur est responsable de la conversion entre les objets JVM et la représentation tabulaire (binaire).
o La représentation tabulaire est stockée au format binaire interne Tungsten de Spark, ce qui permet d’effectuer
des opérations sur des données sérialisées (filter) et d’améliorer l’utilisation de la mémoire.
o Par exemple, nous pouvons effectuer des opérations de filtrage directement sur des données sérialisées. Pas
besoin de convertir en objets JVM.
o L'API de DataSet est disponible uniquement dans Scala et Java.
9
API SPARK: Datasets
Opérations sur les RDD Opérations sur les Dataframes/datasets
10
API SPARK: Datasets
11
API SPARK: RDD vs Dataframe vs Datasets
12
SPARK SQL
13
SPARK SQL
Apache Spark SQL est un module Spark destiné à simplifier
l'utilisation de données structurées à l'aide d'abstractions DataFrame
et DataSet dans Python, Java, Scala et R.
Ces abstractions sont la collection distribuée de données organisée
en colonnes nommées.
Ca permet une bonne technique d'optimisation
SPARK SQL inclut un mode serveur avec une connectivité JDBC et
ODBC conforme aux normes de l'industrie.
15
SPARK SQL
Tous les outils de Business Intelligence (BI) peuvent
se connecter à Spark SQL pour effectuer des analyses de données, comme Tableau ou Pentaho.
API de langage – Spark SQL supporte ces langages de programmation
python,
scala,
java
et R.
En utilisant Spark SQL, nous pouvons interroger des données,
à la fois à l'intérieur d'un programme Spark
et à partir d'outils externes qui se connectent via des connecteurs de base de données standard (JDBC /
ODBC) à Spark SQL
Console SQL –
Spark SQL fournit une console SQL pouvant être utilisée pour exécuter des requêtes. Vous pouvez y accéder
avec la commande “SPARK-SQL”. 16
17
Big Data Analytics
Plan
• Introduction
• Big Data Analytics
• Spark vs Hadoop
• Caractéristiques de Apache Spark
• Spark Ecosystème
• Fonctionnement de Apache Spark
• Installation de Spark
• API Spark: RDD, Dataframe, Dataset
• Spark SQL
• Spark ML
• Spark Streaming
2
Spark ML
3
Spark ML
Spark ML est la bibliothèque d'apprentissage automatique (ML) de Spark. Son objectif est de
rendre l'apprentissage automatique pratique évolutif et facile. À un niveau élevé, il fournit des
outils tels que :
• Algorithmes ML : algorithmes d'apprentissage courants tels que la classification, la régression,
le regroupement (clustring) et le filtrage collaboratif
• Caractéristiques : extraction de caractéristiques, transformation, réduction de dimensionnalité
et sélection
• Pipelines : outils de construction, d'évaluation et de réglage des pipelines de ML
• Persistance : enregistrement et chargement d'algorithmes, de modèles et de pipelines
• Utilitaires : algèbre linéaire, statistiques, traitement de données, etc.
Spark ML se base sur DataFrame.
4
Spark ML
o Pipeline:
• SparkML standardise les API pour les algorithmes d'apprentissage automatique afin de faciliter la
combinaison de plusieurs algorithmes dans un seul pipeline ou flux de travail.
• Le Pipeline fournit un ensemble uniforme d'API de haut niveau construites sur des Dataframes.
• Un pipeline est composé de:
Transformateur
Estimateur
Paramètres
• Pipeline enchaîne plusieurs Transformers et Estimators pour spécifier un flux de travail ML.
5
Spark ML
Transformer: est un algorithme qui peut transformer un DataFrame à un autre DataFrame.
- Inclut les transformateurs de caractéristique (features transformers) et les modèles.
- un transformateur implémente une méthode transform()
- Par exemple, un modèle ML est un Transformateur qui transforme un DataFrame avec des fonctionnalités en un DataFrame
avec des prédictions.
DF1 Transformer DF2
Estimator: est un algorithme qui peut être ajusté sur a DataFrame pour produire un Transforme
- Par exemple, un algorithme d'apprentissage est un Estimator qui s'entraîne sur a DataFrame et produit un modèle.
- un estimateur implemente la méthode fit().
DF1 Estimator Transformer
Parameter: Tous les Transformers et Estimators partagent désormais une API commune pour spécifier les paramètres.
6
Spark ML
Exemple de Pipeline
Estimatorr
Transformer
Logistic
Regression
(lr)
7
TP5: Machine learning sur Spark ML