0% ont trouvé ce document utile (0 vote)
241 vues89 pages

Big Data 2

Transféré par

Jas Min
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd

Thèmes abordés

  • Flux de données,
  • Pipeline de données,
  • RDD immuable,
  • Validité des données,
  • Streaming,
  • Spark Streaming,
  • Validation croisée,
  • Statistiques,
  • Analyse de données,
  • DataFrames
0% ont trouvé ce document utile (0 vote)
241 vues89 pages

Big Data 2

Transféré par

Jas Min
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd

Thèmes abordés

  • Flux de données,
  • Pipeline de données,
  • RDD immuable,
  • Validité des données,
  • Streaming,
  • Spark Streaming,
  • Validation croisée,
  • Statistiques,
  • Analyse de données,
  • DataFrames

Big Data 2

Dr. Ing. Takoua KEFI

[Link]@[Link]
Big Data: terminologies et usage
“Le Big Data (ou mégadonnées) représente les collections de données caractérisées
par un volume, une vélocité et une variété si grands que leur transformation en
valeur utilisable
requiert l’utilisation de technologies et de méthodes analytiques spécifiques."

Aucune définition précise ou universelle ne peut être donnée au Big Data. Etant un objet complexe
polymorphe, sa définition varie selon les communautés qui s’y intéressent en tant qu’usager ou fournisseur
de services.
Il s’agit d’un ensemble de technologies, d’architecture, d’outils et de procédures
permettant à une organisation de très rapidement capter, traiter et analyser de larges
quantités et contenus hétérogènes et changeants, et d’en extraire les informations
pertinentes à un coût accessible.
Dimensions des Big Data

Potentialité
économique
Statistiques, corrélation,
valeur ajoutée des
données
Dimensions des Big Data

• Le caractère « volume » est certainement celui qui est le mieux décrit par le
terme « Big » de l’expression.
• Volume fait référence à la quantité d’informations, trop volumineuse pour
être acquise, stockée, traitée, analysée et diffusée par des outils standards.
• Ce caractère peut s’interpréter comme le traitement d’objets informationnels
de grande taille ou de grandes collections d’objets.
Dimensions des Big Data
• Le caractère « vélocité » ou vitesse fait référence à l’aspect dynamique et/ou
temporel des données, à leur délai d’actualisation et d’analyse.
• Les données ne sont plus traitées, analysées, en différé, mais en temps réel
ou quasi réel.
• Elles sont produites en flots continus, sur lesquels des décisions en
temps réel peuvent être prises.
• Ce sont les données notamment issues de capteurs, nécessitant un
traitement rapide pour une réaction en temps réel.
• Dans le cas de telles données de grande vélocité engendrant des
volumes très importants, il n’est plus possible de les stocker en l’état, mais
seulement de les analyser en flux (streaming), voire de les résumer.
Dimensions des Big Data

• Le caractère « variété » fait référence à l’hétérogénéité des formats, de types,


et de qualité des informations.
• Il est lié au fait que ces données peuvent présenter des formes complexes
du fait qu’elles trouvent leurs origines dans des capteurs divers et variés
(température, vitesse du vent, hygrométrie, tours/mn, luminosité...), dans
des messages échangés (e-mails, médias sociaux, échanges d’images,
de vidéos, musique), dans des textes, des publications en ligne
(bibliothèques numériques, sites web, blogs...), des enregistrements de
transactions d’achats, des plans numérisés, des annuaires, des informations
issues des téléphones mobiles, etc.
Dimensions des Big Data

• Le caractère complémentaire « véracité ou validité » fait référence à la


qualité des données et/ou aux problèmes éthiques liés à leur utilisation.
• Il comprend les problèmes de valeurs aberrantes ou manquantes (ces
problèmes pouvant être résolus par le volume de données), mais aussi à la
confiance que l’on peut avoir dans les données.
• S’il existe des critères permettant de qualifier la qualité des données, dans le
cas de big data, cette vérification de la qualité est rendue difficile voire
impossible du fait du volume, de la variété et de la vélocité spécifiques au Big
Data.
Dimensions des Big Data
• Le caractère complémentaire « valeur » fait référence à la potentialité des
données, en particulier en termes économiques.
• Il est ainsi associé à l’usage qui peut être fait de ces mégadonnées, de leur
analyse, notamment d’un point de vue économique.
• L’analyse de ces mégadonnées demande une certaine expertise tant liée
à des méthodes et techniques en statistique, en analyse de données,
Potentialité
que de domaine pour l’interprétation de ces analyses. économique
• Ainsi le McKinsey Global Institute avance que, dans les seuls États- Statistiques, corrélation,
valeur ajoutée des
Unis, il manquerait environ 150 000 personnes avec une expertise en données

analyse de big data.


Dimensions des Big Data

• Cet organisme estime que le système de santé américain pourrait créer


300 milliards de dollars de valeur par an dont les deux tiers résulteraient
en des réductions de coût d’environ 8 %.
• Les termes de « Data Scientist » et de « Data Science » sont liés à cette
expertise recherchée et à cette nouvelle discipline émergente.
Potentialité
économique
Statistiques, corrélation,
valeur ajoutée des
données
• Centraliser le stockage et le traitement des données
sur un serveur central dans une architecture
client/serveur.
• Données gérées dans le serveur par un SGBDR
(type Oracle, SQL Server, BD 2, etc).
• Serveur central est une machine très puissante,
conçue sur mesure par des sociétés spécialistes de
l’infrastructure informatique (EMC, Dell, HP ou
encore Lenovo).
• Croissance des données de l’entreprise gérée par
upsizing du serveur, c’est-à-dire par augmentation
de la capacité physique de ses composants.
o Augmentation de la mémoire
o Augmentation de la fréquence du processeur
[Link] o Augmentation de la capacité de stockage du
[Link]

• En 2002Google a introduit une nouvelle stratégie technologique.


• l’approche proposée par Google consiste à distribuer le stockage des données et à paralléliser
leur traitement sur plusieurs PC commodes organisées en cluster (on parle de nœuds).
• Avec MapReduce, la spécification de l’itération reste à la charge du programmeur; il faut stocker
le résultat d’un premier job dans une collection intermédiaire et réiterer le job en prenant la
collection intermédiaire comme source.
• C’est laborieux pour l’implantation, et surtout très peu efficace quand la collection intermédiaire
est grande.
• Le processus de sérialisation/désérialisation sur disque propre à la gestion de la reprise sur
panne en MapReduce entraîne des performances médiocres.
• Dans Spark, la méthode est très différente. Elle consiste à placer ces jeux de données en
mémoire RAM et à éviter la pénalité des écritures sur le disque.
• Le défi est alors bien sûr de proposer une reprise sur panne automatique efficace.
Avantages de Spark

• Spark permet à des applications sur clusters Hadoop d’être exécutées jusqu’à 100 fois plus vite
en mémoire, 10 fois plus vite sur disque.
• Il permet d’écrire rapidement des applications en Java, Scala ou Python et inclut un jeu de plus
de 80 opérateurs haut-niveau.
• De plus, il est possible de l’utiliser de façon interactive pour requêter les données depuis un shell.
• En plus des opérations de Map et Reduce, Spark supporte les requêtes SQL et le streaming de
données et propose des fonctionnalités de machine learning et de traitements orientés graphe.
• Les développeurs peuvent utiliser ces possibilités en stand-alone ou en les combinant en une
chaîne de traitement complexe.
Architecture système

•Spark est un framework qui coordonne l’exécution de tâches sur des données en les répartissant
au sein d’un cluster de machines.
•Il est voulu comme extrêmement modulaire et flexible.
•Ainsi, la gestion même 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).
•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 ; 16
• Un executor n’est responsable que de 2 choses :
o exécuter le code qui lui est assigné par le driver
o rapporter au driver l’état d’avancement de la tâche.
• Le driver est accessible programmatiquement par un point d’entrée appelé SparkSession, que
l’on trouve derrière une variable spark.

Dans cet exemple il y a un driver et


4 executors. La notion de nœud dans le
cluster est absente : les utilisateurs
peuvent configurer un ensemble
d’exécutors qui reposent sur chaque
nœud.
• Les Resilient Distributed Datasets, ou RDD, sont un concept au cœur du framework Spark.
• Un RDD peut être vu comme une table dans une base de données.
• Celui-ci peut porter tout type de données et est stocké par Spark sur différentes partitions.
• Les RDD permettent de réarranger les calculs et d’optimiser le traitement.
• Ils sont aussi tolérants aux pannes car un RDD sait comment recréer et recalculer son ensemble
de données.
• Les RDD sont immutables (à lecture seule).
• Pour obtenir une modification d’un RDD, il faut y appliquer une transformation, qui retournera un
nouveau RDD, l’original restera inchangé.
• RDD agit comme une abstraction de partage de données dans un cluster.
• Lorsqu’on parle de « distribué » dans la définition de RDD, on fait en réalité référence à
« shared », partagé, atomique, car il utilise la mémoire cache pour persister les données en
RAM pour réutilisation, évitant ainsi la réplication des données sur disque, nécessaire dans
Hadoop pour garantir la disponibilité du cluster.
• C’est grâce à ce mécanisme qu’il est capable de fournir de la haute disponibilité et la tolérance
aux pannes au cluster.
• Etant donné qu’un RDD est une abstraction, elle n’a pas d’existence réelle, dès lors elle doit être
explicitement créée ou instanciée à travers des opérations déterministes sur des fichiers de
données existants ou sur d’autres instances de RDD.
Il est important à ce stade de noter que Spark a été développée en Scala et que les RDD, en tant
que collection, ont simplement hérité des caractéristiques des collections du langage Scala
(tableau, liste, tuple), à savoir :
• Lazy computations : les calculs exécutés sur les RDD sont « paresseux ». Cela signifie que
spark exécute les expressions uniquement lorsqu’elles sont nécessaires. Techniquement, c’est
lorsqu’une action est déclenchée sur le RDD que celui-ci est exécuté. Cela améliore grandement
les performances de l’application.
• Immutable : Cela signifie qu’ils sont accessibles uniquement en lecture. On ne peut donc pas
modifier un RDD. Cette caractéristique est très utile lors de la gestion d’accès concurrente aux
données, spécialement dans un contexte de valorisation de données à large échelle…
• In-memory : les RDD sont exécutés en mémoire. Ils peuvent également être persistés en cache
pour plus de rapidité. Les développeurs de Spark ont prévu la possibilité de choisir où persister
les RDD (soit sur disque dur, soit en cache, soit en mémoire et sur disque) grâce à la
• Les RDD supportent deux types d’opérations : les transformations, et les actions
Les transformations
• Les transformations sont des opérations d’instanciation qui ne retournent pas de valeur seule,
elles retournent un nouveau RDD.
• Rien n’est évalué lorsque l’on fait appel à une fonction de transformation, cette fonction prend
juste un RDD et retourne un nouveau RDD.
• Les fonctions de transformation sont par exemple:
o map : applique une fonction à chaque élément
o filter : restreint aux éléments selon condition
o join : combine deux RDD sur la base des clés
Les actions
• Les actions évaluent et retournent une nouvelle valeur.
• Au moment où une fonction d’action est appelée sur un objet RDD, toutes les requêtes de
traitement des données sont calculées et le résultat est retourné.
• Les actions sont par exemple:
o collect : retourne les éléments
o count : comptes les éléments
o save : écrit les données sur le disque dur
o Sum: calcule une somme des éléments du RDD
Composantes de Spark
• Spark utilise une architecture en couches, comportant plusieurs composants, dont l'objectif
est de permettre de réaliser des traitements performants tout en promettant un
développement et une intégration facilitées.
• Il est né à la base pour pallier les problèmes posés par Hadoop Map Reduce, mais est devenu
une entité à lui seul, offrant bien plus que le traitement par lot classique.
1. Spark Core
Spark Core est le point central de Spark, qui fournit une plateforme d'exécution pour toutes
les applications Spark. De plus, il supporte un large éventail d'applications.
2. Spark SQL
Spark SQL se situe au dessus de Spark, pour permettre aux utilisateurs d'utiliser des
requêtes SQL/HQL. Les données structurées et semi-structurées peuvent ainsi être
traitées grâce à Spark SQL, avec une performance améliorée.
3. Spark Streaming 2 3

Spark Streaming permet de créer des applications


d'analyse de données interactives. Les flux de données
sont transformés en micro-lots et traités par dessus Spark
1

Core.
4. Spark MLlib
La bibliothèque de machine learning MLlib fournit des algorithmes de haute qualité pour
l'apprentissage automatique. Ce sont des libraries riches, très utiles pour les data scientists,
autorisant de plus des traitements en mémoire améliorant de façon drastique la performance de
ces algorithmes sur des données massives.
5. Spark GraphX
Spark Graphx est le moteur d'exécution permettant un traitement scalable utilisant les
4 5
graphes, se basant sur Spark Core. 2 3

1
Architecture de Spark

• Les applications Spark s'exécutent comme un ensemble indépendant de processus sur un


cluster, coordonnés par un objet SparkContext dans le programme principal, appelé driver
program.
Pour s'exécuter sur un cluster, SparkContext peut se connecter à plusieurs types de gestionnaires
de clusters (Cluster Managers):
o Sur le gestionnaire autonome de Spark (Standalone Scheduler): qui est inclus dans Spark, et
qui présente le moyen le plus rapide et simple de mettre en place un cluster.
o Sur Apache Mesos un gestionnaire de cluster général qui peut aussi tourner sur Hadoop Map
Reduce.
o Sur Hadoop YARN le gestionnaire de ressources de Hadoop 2.
o Sur Kubernetes un système open-source pour l'automatisation du déploiement et la
gestion des applications conteneurisées.
Ces gestionnaires permettent d'allouer les ressources nécessaires pour l'exécution de plusieurs
applications Spark.
Une fois connecté, Spark lance des exécuteurs sur les noeuds du cluster, qui sont des
processus qui lancent des traitements et stockent des données pour les applications. Il envoie
ensuite le code de l'application (dans un chier JAR ou Python) aux exécuteurs. Spark
Context envoie finalement les tâches à exécuter aux exécuteurs.
• Chaque application a son lot d'exécuteurs, qui restent actifs tout au long de l'exécution de
l'application, et qui lancent des tâches sur plusieurs threads.
• Ainsi, les applications sont isolées les unes des autres, du point de vue de l'orchestration
(chaque driver exécute ses propres tâches), et des exécuteurs (les tâches des différentes
applications tournent sur des JVM différentes).
• Ceci implique également que les applications (ou Jobs) Sparks ne peuvent pas échanger des
données, sans les enregistrer sur un support de stockage externe.
• Spark est indépendant du gestionnaire de cluster sous-jacent. Il suffit de configurer Spark
pour utiliser ce gestionnaire, il peut gérer ses ressources en même temps que d'autres
applications, même non-Spark.
• L'application principale (driver) doit être à l'écoute des connexions entrantes venant de ses
exécuteurs.
Workflow avec RDD dans Spark

Des transformations créent des RDD à partir d’une ou deux sources de données.
Les RDD persistants sont en préservés en mémoire RAM, et peuvent être réutilisés par plusieurs
traitements.
Analyse de fichiers log

On veut analyser le fichier journal( log) d’une application dont un des modules (M) est suspect.
On construit un programme qui charge le log, ne conserve que les messages produits par le module
M et les analyse.
On peut analyser par produit, par utilisateur, par période, etc.
Reprise sur panne dans Spark

• Un RDD est une collection partitionnée.


• 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 persistant, Spark réapplique la chaîne de traitement
ayant constitué le RDD.
Contenu du cours

01 02
Spark pour l’ingénieurie des SparkML pour l’apprentissage
données Automatique

03 04
Intégration d’Apache Airflows Intégration à Apache Kafka
01
Spark pour l’ingénieurie des
données

1. Spark Streaming
2. Graph frames
3. ELT
4. Applications
Définitions
• Un Data stream ou flux de données est une séquence non bornée de données qui arrive de manière
continue. Le streaming divise le flux continu des données en unités discrètes pour les traiter. Ces
données peuvent être générées par des capteurs connectés (relevés de télémesure) ou par des
utilisateurs lors de la consultation d'une application, d'un site web ou d'un réseau social (fichiers log).

• Un data frame est une structure bidimensionnelle. Cela signifie que les données sont alignées de
façon tabulaire en colonnes et en lignes.
Spark Streaming

• Spark est bien connu pour sa puissance concernant la parallélisation de calculs très volumineux.
• Outre son interaction facile en Python, il dispose également d'une API haut-niveau avec la définitions
d'objets tels que les DataFrames, très puissant pour manipuler des tableaux de données.
• Mais il y a également une composante très intéressante à explorer sous Spark : c'est Spark
Streaming.
• Cette dernière, comme son nom l'indique, va nous permettre de manipuler des données non
seulement en temps-réel, mais aussi en grande quantités.
• Et tout ça, c'est une des autres forces de Spark, qui le propulse comme un acteur incontournable de
l'event processing.
● Ce système de traitement en temps réel distribué a été conçu pour répondre aux exigences les
plus complexes en matière de traitement de données en temps réel. Il permet d’effectuer des
analyses complexes et des tâches de transformations sur des données provenant de différentes
sources (comme les réseaux sociaux, les périphériques connectés ou les capteurs)
● Grâce à ses fonctionnalités avancées, telles que la gestion des flux de données très important,
l’intégration de data sources variées et la prise en charge de la tolérance aux pannes, Spark
Streaming s’est imposé comme un choix de référence pour les entreprises qui cherchent à
traiter efficacement des données en temps réel.
● Les domaines d’application d’une telle technologie sont très variés. Nous pouvons citer par exemple
la détection de fraude, la surveillance de marchés financiers, ou encore de la recommandation
personnalisée pour des achats en ligne, sans oublier bien entendu des analyses sur les réseaux
sociaux.
Comment fonctionne le streaming de données ?

● Le streaming de données est un processus en temps réel qui consiste à traiter des données qui sont
générées en continu et à les analyser en temps réel.
● Spark Streaming utilise une architecture dite « micro-batch », ce qui signifie que les données sont
divisées en petits lots appelés « batchs » et sont traitées de manière séquentielle. Chaque batch est
traité comme un RDD (Resilient Distributed Dataset) dans Spark, ce qui permet de bénéficier de la
puissance de traitement en parallèle de Spark.
● Pour rappel, un RDD est l’unité de base de données dans Apache Spark, qui est une collection
immuable de données partagées parallèlement sur plusieurs nœuds d’un cluster.
● L'ingestion de données peut être réalisée par plusieurs outils tels que Apache Kafka, Apache Flume
ou Amazon Kinesis, et le traitement peut être fait grâce à des algorithmes complexes, exprimés
par des fonctions de haut niveau tel que map, reduce, join, etc. Finalement, les données traitées
peuvent être envoyées vers des systèmes de fichiers, bases de données ou tableaux de bord en
temps réels. Il est même possible de réaliser des algorithmes de machine learning et de traitement
de graphes sur les flux de données.
● Spark Streaming reçoit des données en streaming et les divise en micro-batches, qui sont ensuite

calculés par le moteur de spark pour générer le flux final de résultats.

● Spark Streaming fournit une abstraction de haut niveau appelée flux discrétisé ou DStream, qui

représente un flux continu de données.

● Les DStreams peuvent être créés soit à partir de flux de données d'entrée provenant de sources telles

que Kafka, Flume et Kinesis, soit en appliquant des opérations de haut niveau sur d'autres DStreams.

● En interne, un DStream est représenté comme une séquence de RDD.


● Dans un modèle d'opérateur continu le traitement est statiquement alloué à un nœud.
● En contre partie, les tâches de Spark sont affectées aux Workers de façon dynamique, sur la base
de la localité des données et des ressources disponibles. Ceci permet une meilleure répartition des
charges et une récupération plus rapide en cas de faute.
● Chaque lot de données est un RDD dans Spark. Ceci permet aux données en streaming d'être
traitées grâche à n'importe quel code ou bibliothèque Spark.
DStream
● Le flux discrétisé ou DStream est l'abstraction de base fournie par Spark Streaming.
● Il représente un flux continu de données, soit le flux de données d'entrée reçu de la source, soit le flux
de données traité généré en transformant le flux d'entrée.
● En interne, un DStream est représenté par une série continue de RDD, qui est l'abstraction de Spark
d'un ensemble de données distribué immuable.
● Chaque RDD d'un DStream contient des données d'un certain intervalle, comme illustré dans la figure
suivante.
● Toute opération appliquée sur un DStream se traduit par des opérations sur les RDD sous-jacents.
● Ces transformations RDD sous-jacentes sont calculées par le moteur Spark. Les opérations DStream
masquent la plupart de ces détails et fournissent au développeur une API de niveau supérieur pour
plus de commodité.
● RDD (Resilient Distributed Dataset) et DStream (Discretized Stream) sont tous deux des abstractions
de base dans Apache Spark, mais ils ont des caractéristiques distinctes et sont utilisés dans des
contextes différents.
Caractéristiques DStreams RDD

Modèle de traitement Modèle de traitement en continu Modèle de traitement par lots

Traitement des données en temps réel ou Analyse de données hors ligne, ETL,
Cas d'utilisation
quasi-réel algorithmes itératifs

Disponible dans les versions antérieures Disponible dans toutes les versions de
Disponibilité de l'API
de Spark Spark

Abstraction de niveau supérieur pour le


Modèle de programmation Contrôle de bas niveau et flexibilité
traitement des flux

Opérations spécifiques au flux (par Transformations générales (par


Transformation
exemple, fenêtrage) exemple, mapper, filtrer)

Géré automatiquement par Spark Strea-


Tolérance aux pannes Géré automatiquement par Spark
ming

Latence réduite grâce au traitement en Latence plus élevée en raison du trai-


Latence de traitement
temps réel ou quasi réel tement par lots

Prend en charge diverses sources de don- Prend en charge les sources de don-
Sources de diffusion en
nées en streaming (par exemple, Kafka, nées statiques (par exemple, fichiers,
continu
Flume) HDFS)
Intégration avec d'autres composants
Intégration Streaming structuré basé sur DStreams
Spark
● Chaque opération sur un DStream s'applique à tous les RDD sous-jacents. DStream offre ainsi au
développeur une API de haut niveau pour faciliter le travail sur les données en streaming.
● Les opérations sur le DStreams peuvent être:
○ Transformations: qui peuvent être:
■ Sans état (Stateless): ce sont des transformations où le traitement sur un lot n'a pas de
dépendance avec les lots précédents. Les transformations sans état sont de simples
transformations RDD. Elles s'appliquent sur chaque batch (et sur chaque RDD) du DStream.
Ceci inclut des transformations classiques telles que map, filter, reduceByKey, etc.
■ Avec état (Stateful): ces transformations utilisent des données ou des résultats
intermédiaires provenant des batches précédents. Les transformations avec état sont des
opérations sur les DStreams qui suivent l'évolution des données à travers le temps. Les deux
types de transformations avec état sont les windowed operations, qui opèrent sur une
fenêtre glissante de périodes de temps, et la updateStateByKey, utilisée pour suivre l'état à
travers les évènements de chaque clef.
● Output Operations: elles sont réalisées pour renvoyer un résultat après les transformations. C'est
l'équivalent des actions pour les RDDs. On peut citer: print, save, etc.
GraphFrames

● GraphFrames, est une bibliothèque qui étend les fonctionnalités de Spark avec des algorithmes
parallélisés pour traiter les problèmes de graphes.
● Bien qu’elle ne soit pas forcément la plus rapide comparée à certains frameworks dédiés aux
graphes, elle présente l’avantage de fonctionner au sein de Spark et en rend l’utilisation d’autant
plus facile.
ETL

● Apache Spark, un framework de traitement de données distribué, a révolutionné le


processus d'extraction, de Transformation et de Chargement de données (ETL= Extract,
Load, Transfert) pour l'ingénierie des données, la science des données et l'apprentissage
automatique.
● Il fournit une API de haut niveau pour une transformation facile des données et un écosystème solide
avec de nombreux outils, connecteurs et bibliothèques prédéfinis.
● Les processus ETL traditionnels peuvent être longs et laborieux, mais Apache Spark améliore ce
processus en permettant aux organisations de prendre des décisions plus rapides basées sur les
données grâce à l'automatisation. Il gère efficacement des volumes incroyables de données, prend en
charge le traitement parallèle et permet une agrégation efficace et précise des données provenant de
plusieurs sources.

Pipeline de données
● Un pipeline de données encadre la façon dont les données circulent d'un système à l'autre. Il englobe
une série d'étapes qui sont réalisées dans un ordre spécifique, car le résultat de chaque étape informe
l'étape suivante.
● Ils se composent généralement de trois éléments clés : une source, des étapes de traitement des
données et une destination, ou « sink ». Les données peuvent être modifiées au cours du processus
de transfert, et certains pipelines peuvent servir simplement à transformer les données. Dans ce cas,
la source et la destination sont le même système.
● Au cours des dernières années, les pipelines de données ont dû gagner en puissance pour répondre
aux besoins en big data des organisations, avec la généralisation des grands volumes de données et
leur diversification croissante.
● Il faut prendre des mesures pour que les pipelines soient protégés contre toute perte de données afin
d'assurer un haut niveau de précision et de qualité, et qu'ils puissent évoluer en fonction des besoins
des entreprises. Ils doivent être suffisamment polyvalents pour accueillir des données structurées,
non structurées et semi-structurées.
Exemples courants de pipelines de données

● Il existe différentes architectures de pipelines de données, adaptés à différents cas d'usage du fait de
leurs attributs spécifiques.

Pipeline de batch
● Les pipelines de batch sont, comme leur nom le suggère, utilisés pour traiter les données par lot. Si on
a besoin de déplacer un grand nombre de points de données d'un système (système de paie, par
exemple) vers un data warehouse, on peut utiliser un pipeline de batch.
● Les données ne sont pas transférées en temps réel. On attend généralement qu'elles s'accumulent et
on les transfère selon un calendrier défini.
Exemples courants de pipelines de données

Pipeline de streaming
● Un pipeline de streaming peut être utilisé pour traiter les données brutes presque instantanément.
● Le moteur de traitement des flux traite les données en temps réel, au fur et à mesure qu’elles sont générées, ce qui
en fait une excellente alternative pour les organisations qui accèdent à des informations en continu, comme les
marchés financiers ou les médias sociaux.
Exemples courants de pipelines de données

L’architecture Lambda

● L'architecture Lambda offre une approche hybride pour le traitement des données en
combinant traitement par batch et en streaming.
● Si cette approche peut avoir des avantages, notamment en termes d'évolutivité et de
flexibilité, ses inconvénients peuvent être plus importants.
● Elle est souvent considérée comme inutilement complexe parce qu'elle exige plusieurs
couches (batch, vitesse et service).
● Elle implique donc un temps et une puissance de calcul considérables, sans parler du coût.
● De plus, comme deux bases de code différentes doivent être synchronisées, elle peut être
difficile à maintenir et à déboguer.
● Couche batch (Batch Layer) :
○ Stockage de l’ensemble des données
○ Traitements massifs et réguliers
○ La fréquence des traitements ne doit pas être trop importante afin de minimiser les tâches de
fusion des résultats pour constituer les vues
● Couche temps réel (Speed Layer) :
○ Traite tout type de donnée reçu en temps réel
○ Calcul des vues incrémentales qui vont compléter les vues batch afin de fournir des données plus
récentes
○ Suppression des vues temps réel obsolètes (postérieures à un traitement batch)
● Couche de service (Serving Layer) :
○ Permet de stocker et d’exposer aux clients les vues créées par les couches batch et temps réel
○ Adapté à tous types de bases NoSQL
Exemples courants de pipelines de données

Architecture Delta
● L'architecture Delta offre une alternative à l'architecture Lambda.
● Axée sur la simplicité, l'architecture Delta importe, traite, stocke et gère les données au sein du
Delta Lake.
● L'architecture Delta contient moins de code à maintenir, offre une source unique de vérité pour les
utilisateurs en aval et facilite la fusion des nouvelles sources de données.
● Elle réduit également les coûts des tâches en minimisant le nombre de sauts de données et d'échecs,
et en réduisant le temps de réalisation des tâches et de création de clusters.
● Elle propose une plate-forme unifiée pour le traitement par lots et le streaming.
● Elle y parvient en exploitant les techniques de micro-traitement par lots.
● L'architecture Delta simplifie l'intégration, le traitement, le stockage et la gestion des données par
lots et en streaming dans le même pipeline en utilisant un modèle de flux de données continu.
● Les flux de travail sont organisés en différentes zones : BRONZE, SILVER et GOLD.
● Chaque zone a un objectif spécifique et joue un rôle essentiel dans la création de pipelines de
données
Zone BRONZE
● Ingestion et stockage des données La zone BRONZE est responsable de l'ingestion et du stockage des
données. Dans cette zone, les données brutes sont ingérées à partir de diverses sources telles que
des fichiers, des bases de données ou des plateformes de streaming.
● La zone BRONZE sert de base à l'ensemble de l'architecture, car elle contient les données brutes dans
leur forme d'origine. Le stockage des données dans un Data Lake permet une flexibilité du schéma et
une exploration facile des données tout en fournissant une couche de stockage robuste pour les
étapes de traitement ultérieures.
Zone ARGENT
● La zone SILVER se concentre sur la transformation et la préparation des données.
● Dans cette zone, les données de la zone BRONZE sont traitées, nettoyées et transformées dans un
format plus structuré.
● On peut y appliquer des transformations, des agrégations et une logique métier à l'aide de l'API
Zone Gold
● La zone GOLD est l'endroit où les données traitées à partir de la zone SILVER sont analysées plus en
détail, agrégées et utilisées pour le traitement par lots et par flux.
Création d’un pipeline de données

● Les modalités de création et d'implémentation d'un pipeline de données dépendent souvent des
besoins de l'entreprise.
● Dans la plupart des cas, ce sont les data engineers qui se chargent de développer un
pipeline de données de production.
● On peut écrire du code pour accéder aux sources de données via une API, effectuer des transformations
et transférer des données vers les systèmes cibles.
● Toutefois, sans automatisation, il faut un investissement conséquent en termes de temps, de code et
de ressources d'ingénierie et d'opérations.
● D’innombrables outils sont disponibles et facilitent la définition de pipelines de bout en bout. Plutôt que
d'assembler manuellement une diversité de tâches de traitement de données, on peut spécifier la
source de données, la logique de transformation et l'état de destination des données. Les DLT
maintiennent automatiquement toutes les dépendances éventuelles, ce qui réduit considérablement le
temps passé à les ajuster manuellement.
Différence entre l'ETL et un pipeline de données
● Pour dire les choses simplement, l'ETL est un type de pipeline de données, mais les pipelines de
données ne sont pas tous des pipelines ETL.
● ETL signifie « extraction, transformation, chargement (load) », trois processus interdépendants
impliqués dans l'intégration des données. Ces processus servent à extraire les données d'une base de
données pour les déplacer dans une autre, comme un data warehouse cloud, afin qu'elles y soient
exploitées à des fins d'analyse, dans des visualisations et dans des rapports. Les tâches ETL sont
effectuées à l'aide d'un pipeline de données à l'implémentation spécifique.
● Certains pipelines de données n'impliquent aucune transformation et n'implémentent pas
nécessairement d'ETL. Par exemple, la dernière étape d'un pipeline peut consister à activer un autre
workflow ou un autre processus.
Outils à utiliser pour créer un pipeline de données
● On trouve un large éventail d'outils et d'applications, à commencer par Apache Spark™, pour créer et
maintenir des pipelines de données, faciliter la gestion des données et prendre en charge la Business
Intelligence.
● Comme ces applications nécessitent une grande part d'optimisation manuelle, elles représentent un
cas d'usage de choix pour les organisations qui possèdent l'expertise nécessaire pour créer et
personnaliser leurs propres pipelines.
● En attendant, une solution telle que les Databricks Delta Live Tables (DLT) offre un certain degré
d'automatisation tout en réduisant la complexité.
● Cette solution facilite la création et la gestion de pipelines de données en batch et en streaming, qui
délivrent avec une grande fiabilité des données de haute qualité sur la plateforme lakehouse
Databricks.
● Les DLT simplifient le développement et la gestion de l'ETL pour les équipes de data engineering grâce
au développement déclaratif, et apportent une visibilité détaillée qui soutient la supervision et la
restauration en cas de problème. Enfin, ces pipelines de données intelligents intègrent des tests
02
SparkML pour le Machine Learning

1. Présentation
2. Prétraitement de données
3. Classification et Régression
4. Evaluation et tuning
5. Clusterisation avec Spark ML
Présentation de Spark ML
Qu’est ce que Spark ML

● Spark ML est une bibliothèque de machine learning construite sur Apache Spark, un système de calcul
en cluster open source.
● Elle fournit des API de haut niveau pour les tâches courantes de machine learning telles que la
classification, la régression et le clustering.
● D'autre part, PySpark ML est une bibliothèque Python pour Spark ML. Elle fournit une API simple et
facile à utiliser pour créer et déployer des pipelines de machine learning.
● Spark ML est construit sur Spark DataFrames et utilise un API unifié pour le prétraitement des
données, la modélisation, et l'évaluation des modèles.
● Spark ML permet d’exécuter des algorithmes de machine learning de manière parallèle et distribuée,
ce qui le rend efficace pour traiter de très grands ensembles de données, souvent au-delà des
capacités des machines individuelles.
Concepts Clés de Spark ML

● DataFrame : Structure de données distribuée similaire aux tables de bases de données, utilisée pour
manipuler les données d’entrée pour le machine learning.
● Pipeline : En Spark ML, un pipeline est une chaîne d’opérations où chaque étape (prétraitement,
transformation, modélisation) est définie de manière séquentielle. Chaque étape peut être un
Estimator (qui entraîne un modèle) ou un Transformer (qui applique des transformations aux
données).
○ Exemple : Normalisation des données -> Encodage des catégories -> Modèle de régression
● Estimator : Un objet capable d’apprendre à partir de données. Exemple : un modèle de régression ou
de classification.
● Transformer : Un objet capable d’appliquer une transformation sur les données. Exemple :
StringIndexer pour encoder des colonnes catégorielles en valeurs numériques.
● ParamGridBuilder : Un outil pour effectuer de la validation croisée ou de l’optimisation
d’hyperparamètres.
Différence entre Spark ML et Spark mllib

● Avant l’introduction du concept de DataFrames dans Spark, les anciennes implémentations


d'algorithmes ML s'appuyaient sur les RDD. Et on fait ainsi appel à la bibliothèque « Spark MLlib ».
● Après les DataFrames, certaines implémentations plus récentes ont été ajoutées en tant que
wrappers par-dessus les anciennes qui étendaient l'API pour fonctionner avec les DataFrames. On
l'appelle parfois « Spark ML ».
● Les deux sont en quelque sorte interchangeables ; et coexiste dans les version de Spark.
Étapes d’un Pipeline Spark ML

● 1. Préparation des données : Nettoyage et transformation des données avant l’apprentissage. Cela
inclut le traitement des valeurs manquantes, la normalisation des données, et l’encodage des
variables catégorielles.
○ Exemples d’opérations : StringIndexer, OneHotEncoder, VectorAssembler.
● 2. Construction du modèle : Création et entraînement d’un modèle de machine learning avec les
données préparées.
○ Algorithmes courants en Spark ML : Régression Linéaire, Régression Logistique, Arbres de
Décision, Random Forest, K-Means, etc.
● 3. Évaluation du modèle : Utilisation de métriques comme la précision, le F1-score, ou la MSE
(Mean Squared Error) pour évaluer la qualité du modèle.
○ Outils : BinaryClassificationEvaluator, MulticlassClassificationEvaluator.
● 4. Optimisation : Tuning des hyperparamètres avec des outils comme CrossValidator ou
TrainValidationSplit.
● 5. Avantages de Spark ML
Avantages de Spark ML

● Traitement distribué : Spark ML peut traiter des pétaoctets de données, répartissant les tâches de
machine learning sur plusieurs nœuds.
● API simple et intégrée : Les pipelines permettent de chaîner les transformations et l’entraînement
en une seule structure, ce qui simplifie le flux de travail.
● Scalabilité : L'architecture distribuée de Spark permet d’ajuster la taille du cluster en fonction des
besoins du projet.
Prétraitement de données
dans Spark ML
Le prétraitement de données consiste dans les opérations suivantes:
● L’mportation des données dans Spark.
● La gestion des données manquantes.
● La transformation des variables catégoriques en variables numériques (utilisation de StringIndexer,
OneHotEncoder)
● La standardisation et normalisation des données (utilisation de StandardScaler, MinMaxScaler)
Fonctions et instructions
● Importations de bibliothèques
Avant de commencer, il est important d'importer les bibliothèques nécessaires :
from [Link] import StringIndexer, OneHotEncoder, VectorAssembler, StandardScaler, MinMaxScaler
from [Link] import Pipeline
from [Link] import SparkSession

● StringIndexer – Encodage des variables catégorielles


Transforme une colonne catégorielle (contenant des variables qualitatives) en une colonne d’index
numériques.
indexer = StringIndexer(inputCol="category_column", outputCol="indexed_column")
indexed_data = [Link](data).transform(data)

● OneHotEncoder – Encodage One-Hot des variables catégorielles


Convertit une colonne indexée (via StringIndexer) en un vecteur one-hot encodé.
encoder = OneHotEncoder(inputCol="indexed_column", outputCol="encoded_column")
encoded_data = [Link](indexed_data).transform(indexed_data)
Fonctions et instructions
VectorAssembler – Combinaison de plusieurs colonnes en un vecteur
● Utilisé pour assembler plusieurs colonnes (fonctionnalités) en une seule colonne de vecteurs.
assembler = VectorAssembler(inputCols=["feature1", "feature2", "feature3"], outputCol="features")
assembled_data = [Link](data)

MinMaxScaler – Mise à l’échelle min-max


● Normalise les données en les ramenant dans une plage spécifique (généralement [0, 1]).
minmax_scaler = MinMaxScaler(inputCol="features", outputCol="scaled_features")
scaled_data = minmax_scaler.fit(assembled_data).transform(assembled_data)

Binarizer – Binarisation des données


● Transforme une colonne en valeurs binaires en fonction d’un seuil.
from [Link] import Binarizer
binarizer = Binarizer(inputCol="feature", outputCol="binary_feature", threshold=0.5)
binarized_data = [Link](data)

Handling Missing Data – Gestion des valeurs manquantes


Fonctions et instructions
Handling Missing Data – Gestion des valeurs manquantes
● Pour gérer les valeurs manquantes, on peut utiliser les méthodes suivantes :
○ Supprimer les lignes avec des valeurs manquantes :
cleaned_data = [Link]()
○ Remplacer les valeurs manquantes par une valeur spécifique :
filled_data = [Link]({"column1": 0, "column2": "unknown"})
Classification et régression
de données dans Spark ML
Etapes pour l’analyse de Régression
# Importer les bibliothèques nécessaires :
from [Link] import SparkSession
from [Link] import VectorAssembler
from [Link] import LinearRegression
from [Link] import RegressionEvaluator

# Créer une SparkSession :


spark = [Link]( "RegressionExample" ).getOrCreate()

# Lire les données d'un fichier CSV :


data = [Link]( "path_to_your_data.csv" , header= True , inferSchema= True )

# Sélectionner les colonnes pertinentes :


selected_data = [Link]( "feature_col1" , "feature_col2" , "target_col" )
Etapes pour l’analyse de Régression
# Créer un assembleur vectoriel :
assembler = VectorAssembler(inputCols=[ "feature_col1" , "feature_col2" ], outputCol= "features" )
# Transformer les données à l'aide de l'assembleur vectoriel :
turned_data = [Link](selected_data)

# Diviser les données en ensembles d'apprentissage et de test :


train_data, test_data = turned_data.randomSplit([ 0.7 , 0.3 ], seed= 42 )

# Créer un modèle de régression linéaire :


lr = LinearRegression(featuresCol= "features" , labelCol= "target_col" )

# Ajuster le modèle aux données d'apprentissage :


lr_model = [Link](train_data)

# Faire des prédictions sur les données de test :


predictions = lr_model.transform(test_data)
Etapes pour l’analyse de Régression
# Évaluer les performances du modèle :
evaluator = RegressionEvaluator(labelCol= "target_col" , predictionCol= "prediction" , metricName= "rmse" )
rmse = [Link](predictions)
print ( f"Erreur quadratique moyenne (RMSE) : {rmse} " )

# Imprimer les coefficients et l'intercept :


print ( f"Coefficients : {lr_model.coefficients} " )
print ( f"Intercept : {lr_model.intercept} " )

# Arrêter la SparkSession :
[Link]()
Etapes pour la classification
# Importer les bibliothèques nécessaires :
from [Link] import SparkSession
from [Link] import VectorAssembler
from [Link] import LogisticRegression
from [Link] import MulticlassClassificationEvaluator

# Créer une SparkSession :


spark = [Link]( "ClassificationExample" ).getOrCreate()

# Charger l'ensemble de données :


data = [Link]( "path_to_your_data.csv" , header= True , inferSchema= True )

# Sélectionner les colonnes de fonctionnalités et la colonne cible :


feature_cols = [ "feature_col1" , "feature_col2" , ...]
selected_data = [Link](feature_cols + [ "target_col" ])
Etapes pour la classification
# Assembler les colonnes de fonctionnalités dans une colonne vectorielle :
assembler = VectorAssembler(inputCols=feature_cols, outputCol= "features" )
turned_data = [Link](selected_data)

# Diviser les données en ensembles d'entraînement et de test :


train_data, test_data = turned_data.randomSplit([ 0.8 , 0.2 ], seed= 42 )

# Créer un modèle de régression logistique :


lr = LogisticRegression(labelCol= "target_col" , featuresCol= "features" )

# Entraîner le modèle :
lr_model = [Link](train_data)

# Faire des prédictions sur les données de test :


predictions = lr_model.transform(test_data)
Etapes pour la classification
# Évaluer les performances du modèle :
evaluator = MulticlassClassificationEvaluator(labelCol= "target_col" , metricName= "accuracy" )
accuracy = [Link](predictions)
print ( f"Accuracy: {accuracy} " )

# Arrêter le SparkSession :
[Link]()
Fonctions à retenir

● randomSplit() : Sépare le dataset en plusieurs sous-ensembles de manière aléatoire.


● Par exemple:
training_data, test_data = [Link]([0.8, 0.2], seed=1234)

● En fixant une valeur pour le paramètre seed, on définit un point de départ pour le générateur de
nombres aléatoires. Cela permet d’obtenir exactement les mêmes sous-ensembles à chaque
exécution, à condition que les autres paramètres (par exemple les proportions de séparation) restent
inchangés.

● L'option seed dans la fonction randomSplit de Spark ML est utilisée pour garantir la reproductibilité
lors de la séparation aléatoire d’un dataset en plusieurs sous-ensembles (par exemple, ensemble
d’entraînement et ensemble de test).
Fonctions à retenir

● Pour l'apprentissage supervisé, plusieurs algorithmes de classification et de régression sont disponibles


dans Spark ML.
Classification :
○ LogisticRegression : Régression logistique pour la classification binaire.
○ DecisionTreeClassifier : Arbre de décision pour la classification.
○ RandomForestClassifier : Forêt aléatoire pour la classification.
○ GradientBoostedTreeClassifier : Gradient Boosting pour la classification.
Régression :
○ LinearRegression : Régression linéaire pour les problèmes de régression.
○ DecisionTreeRegressor : Arbre de décision pour la régression.
○ RandomForestRegressor : Forêt aléatoire pour la régression.
Fonctions à retenir

● Une fois le modèle entraîné, on peut faire des prédictions sur l'ensemble de test ou sur de nouvelles
données. Pour cela on utilise la fonction:

transform() : Applique le modèle pour faire des prédictions sur un DataFrame de test.
● On peut également mesurer les performance du modèle en l'évaluant sur les données de test. On
utilise l’une des fonctions:
○ BinaryClassificationEvaluator : Évalue les modèles de classification binaire avec des métriques
comme l’AUC.
○ MulticlassClassificationEvaluator : Pour les problèmes de classification multiclasse (précision,
F1-score).
○ RegressionEvaluator : Évalue les modèles de régression avec des métriques comme la RMSE,
MSE, ou MAE.
Fonctions à retenir

● Une fois le modèle entraîné, on peut faire des prédictions sur l'ensemble de test ou sur de nouvelles
données. Pour cela on utilise la fonction:

transform() : Applique le modèle pour faire des prédictions sur un DataFrame de test.
Evaluation et tuning
Fonctions à retenir

● Dans la classification, on cherche à évaluer la capacité d’un modèle à attribuer correctement des
classes aux observations. Spark ML propose plusieurs métriques pour cela, parmi lesquelles on donne:
○ Précision (accuracy) : Le pourcentage de prédictions correctes.
○ F1-score (f1) : Une moyenne harmonique entre la précision et le rappel.
○ Area Under ROC (areaUnderROC) : Mesure l'aire sous la courbe ROC, indiquant la capacité du
modèle à distinguer les classes.
● Les fonctions permettant d’effectuer ces mesures sont:
○ BinaryClassificationEvaluator : Pour les problèmes de classification binaire, avec des métriques
comme l’aire sous la courbe ROC (AUC) et la courbe PR (Precision-Recall).
○ MulticlassClassificationEvaluator : Pour les problèmes de classification multiclasse, avec des
métriques comme la précision, le rappel et le F1-score.
Fonctions à retenir

● Pour les modèles de régression, on cherche à mesurer l'écart entre les prédictions et les valeurs réelles.
Spark ML fournit plusieurs métriques pour évaluer ces écarts, parmis lesquelles on note:
○ Mean Squared Error (MSE) : Moyenne des carrés des erreurs.
○ Root Mean Squared Error (RMSE) : Racine carrée de la MSE, couramment utilisée pour
interpréter les erreurs dans les mêmes unités que la variable de sortie.
○ Mean Absolute Error (MAE) : Moyenne des valeurs absolues des erreurs.
○ R² (Coefficient of Determination) : Indique la proportion de variance expliquée par le modèle.
● Pour cela on utilise la fonction:
RegressionEvaluator : Évaluateur pour les modèles de régression, avec des métriques comme RMSE,
MSE, MAE, et R².
Fonctions à retenir

● Une bonne pratique consiste à utiliser la validation croisée pour évaluer les performances du modèle
sur plusieurs sous-ensembles de données, afin d’éviter l'overfitting.
● CrossValidator : Utilisé pour faire de la validation croisée. Il divise les données en plusieurs "folds",
entraîne et évalue le modèle sur chacun d'entre eux, puis calcule une métrique moyenne. Il est souvent
utilisé conjointement avec un grid search (recherche d'hyperparamètres).
● La fonction ParamGridBuilder est utilisée pour créer une grille de recherche d'hyperparamètres
pour les modèles de machine learning. Elle assure l’automatisation de la recherche et l’évaluation de
différents ensembles d'hyperparamètres afin d’optimiser les performances du modèle.
Clusterisation sur SparkML
# Importer les bibliothèques nécessaires :
from [Link] import SparkSession
from [Link] import VectorAssembler
from [Link] import KMeans
from [Link] import ClusteringEvaluator # Ajouté pour le score de silhouette facultatif

# Créer une SparkSession :


spark = [Link]( "ClusteringExample" ).getOrCreate()

# Charger des données dans un DataFrame :


data = [Link]( "path_to_your_data.csv" , header=True, inferSchema=True)

# Sélectionner les entités pour le clustering :


feature_cols = [ "feature1" , "feature2" , ...]
assembler = VectorAssembler(inputCols=feature_cols, outputCol= "features" )
turned_data = [Link](data)

# Entraîner le modèle K-means :


# Entraîner le modèle K-means :
k = 3 # Spécifier le nombre de clusters
kmeans = KMeans(featuresCol= "features" , k=k, seed=42)
model = [Link](transformed_data)

# Faire des prédictions :


predictions = [Link](transformed_data)

# Afficher les affectations de clusters :


selected_data = [Link]( "features" , "prediction" )
selected_data.show()

# Imprimer le score Silhouette (facultatif) :


evaluator = ClusteringEvaluator()
silhouette_score = [Link](predictions)
print(f "Silhouette Score: {silhouette_score}" )

Common questions

Alimenté par l’IA

Fault tolerance in Spark Streaming is achieved through several mechanisms that ensure robust and reliable data processing. One crucial aspect is Spark's ability to dynamically assign tasks to workers based on data locality and available resources, which helps in rapid recovery if a node fails . The use of RDDs as underlying data representation provides inherent fault tolerance, as they are immutable and can be recomputed from the lineage information if lost . Spark’s support for external systems like Apache Kafka and Amazon Kinesis for data ingestion further enhances reliability by enabling data replay and persistence capabilities in case of failures . Ongoing operations on DStreams allow the system to maintain and recover intermediate state information across batches, providing resilient handling of streaming data .

The primary difference between transformations involving DStreams and traditional batch processing with RDDs in Spark ML lies in the processing model and use-case focus. DStream transformations target real-time or near-real-time data processing with low latency, representing a continuous stream of data processed incrementally by dividing the data into micro-batches . In contrast, RDD transformations are designed for batch processing, handling data offline with inherently higher latency . DStream operations mask the underlying complexities, offering high-level abstractions tailored for stream processing, while RDDs provide more granular control over data and transformations, suitable for iterative algorithms and ETL tasks .

DStream provides a high-level abstraction in Spark Streaming, representing a continuous stream of data . Internally, a DStream is a sequence of RDDs (Resilient Distributed Datasets), which are processed by the Spark engine to compute the final stream of results . This design allows operations applied to DStreams to translate into operations on the underlying RDDs, providing both a flexible and scalable mechanism to process streaming data . Such an architecture contributes greatly to performance by allowing dynamic task allocation based on data locality and available resources, resulting in optimal load balancing and rapid fault recovery .

Choosing between logistic regression and decision tree classification models in Spark ML depends on several factors, including the nature of the dataset, the problem requirements, and the interpretability needs. Logistic regression works well for binary classification problems with linearly separable data and provides a probabilistic interpretation of classifications . It is computationally lighter and often preferred for large-scale datasets with straightforward decision boundaries. On the other hand, decision trees can handle complex, non-linear data distributions and offer easy-to-understand models through graphical tree representation, making them a better choice when feature interactions need to be understood . However, they can be prone to overfitting, particularly with noisy data, which logistic regression inherently avoids . Thus, the decision balances interpretability, computational efficiency, and data characteristics.

StringIndexer and OneHotEncoder are crucial in the data pre-processing step within Spark ML by transforming categorical variables into numerical formats, which are required for machine learning models. StringIndexer converts a categorical column into a numerical index, assigning an integer index to each category . OneHotEncoder then transforms the indexed categorical data into a binary vector representation, which enables the model to treat the categories as separate features without implying any ordinal relationship . These transformations facilitate the inclusion of categorical data into machine learning algorithms that necessitate numerical inputs .

Structured streaming provides a more powerful, flexible, and unified approach to stream processing compared to traditional Spark Streaming. While traditional streaming uses DStreams and a micro-batch architecture, structured streaming is built on top of the Spark SQL engine, leveraging a continuous processing model that provides lower-latency processing without sacrificing performance . Structured streaming allows users to write streaming computations the same way they write batch queries, making it easier for developers to transition between batch and stream processing in Spark. It also integrates seamlessly with SparkML and GraphFrames, providing a more comprehensive and cohesive framework for real-time data processing . This unification of batch and stream processing paradigms removes the complexity associated with managing two architectures, increasing developer productivity and reducing maintenance overhead .

ETL processes benefit significantly from Apache Spark's distributed processing capabilities by enabling efficient handling and transformation of large datasets across multiple nodes, which accelerates data processing . Spark’s ability to perform in-memory computations allows for faster data processing compared to traditional disk-based ETL tools, reducing the time required for extraction, transformation, and loading phases . Spark also supports complex transformations and joins with its comprehensive library of functions, optimizing data aggregation and synthesis from diverse sources . Its high-level API simplifies writing complex workflows, enhancing productivity and reducing the potential for errors in ETL operations . Furthermore, Spark's scalability ensures that as data volumes grow, resources can be adjusted to maintain performance levels, making it a robust solution for big data ETL tasks .

Windowed operations in Spark Streaming allow the aggregation of data over a sliding window of time, facilitating complex event processing tasks that require the accumulation of data from multiple time intervals. These operations are particularly beneficial in scenarios where trend analysis or real-time state tracking is crucial, such as monitoring user activities over a set period, detecting frauds in financial transactions, or aggregating social media interactions to derive user sentiments . By applying functions like reduceByKeyAndWindow and countByWindow, windowed operations process overlapping batches within moving time windows, making it possible to handle dynamic and temporal data patterns efficiently .

Spark Streaming processes real-time big data by using a 'micro-batch' architecture, where incoming data streams are divided into small batches that are processed sequentially . This framework allows for the manipulation of vast quantities of data in real-time, leveraging Spark’s robust distributed processing capabilities through RDDs, which are processed across multiple nodes in a cluster . Key features that make Spark Streaming suitable for complex tasks include its ability to integrate various data sources (like social networks, IoT devices, and sensors), management of massive data streams, support for fault tolerance, and its extensive API that facilitates operations like map, reduce, and join on streaming data . Its ability to handle diverse application domains, such as fraud detection and personalized recommendations, further underlines its flexibility and utility in complex data processing tasks .

Cross-validation and hyperparameter tuning enhance machine learning model performance in Spark ML by systematically evaluating different parameter combinations to identify the most effective model configuration. Cross-validation divides the dataset into several folds, iteratively training and validating the model on these subsets to ensure its performance is not dependent on a particular training set . This method helps in mitigating the risk of overfitting by ensuring that model parameters generalize well across different datasets . Meanwhile, tools like ParamGridBuilder and CrossValidator automate the search for optimal hyperparameters, adapting models to exploit dataset characteristics and improve predictive accuracy . The combination of these techniques leads to more robust, accurate, and scalable models tailored to specific data patterns, greatly improving overall performance .

Vous aimerez peut-être aussi