Votre progression
Syllabus
-
-
Objectifs
-
Validations de compétences
-
Public cible
Aucun public cible spécifié pour ce module.
-
Besoins techniques
-
Prérequis
- Aucun prérequis
-
Niveau
-
Historique du module
Aucune action enregistrée
-
Introduction à Apache Spark
Apache Spark est un moteur open-source de traitement distribué, conçu pour traiter de grands volumes de données rapidement et efficacement. Il se distingue par sa capacité à effectuer des calculs en mémoire (in-memory computing), ce qui le rend bien plus rapide que les solutions traditionnelles comme Hadoop MapReduce.- Polyvalence : Spark permet de traiter des données en batch (lots), en streaming (temps réel), de faire de l’analytique SQL et du machine learning.
- Écosystème riche : Spark propose des modules pour SQL (Spark SQL), le streaming (Structured Streaming), le machine learning (MLlib) et le traitement de graphes (GraphX).
- Langages supportés : Scala (langage natif), Python, Java, R.
Grâce à son architecture distribuée, Spark est utilisé par de nombreuses entreprises pour l’analyse de données massives, la détection de fraudes, la recommandation de produits, l’analyse de logs, etc.
-
Concepts fondamentaux de Spark
-
Architecture générale
- Cluster Spark : Spark fonctionne sur un cluster composé d’un driver (programme principal qui orchestre les calculs) et de workers (nœuds qui exécutent les tâches).
- DAG (Directed Acyclic Graph) : Spark construit un graphe acyclique des opérations à effectuer, ce qui permet d’optimiser l’exécution et la tolérance aux pannes.
- Scheduler : Le scheduler découpe les tâches et les répartit sur les différents workers.
Exemple d’usage : Un job Spark lancé depuis un notebook Jupyter envoie le code au driver, qui le découpe en tâches distribuées sur plusieurs machines du cluster.
-
RDD (Resilient Distributed Dataset)
- Les RDD sont la structure de base de Spark : des collections de données réparties sur plusieurs nœuds, tolérantes aux pannes.
- On applique des transformations (map, filter, etc.) et des actions (collect, count, save) pour manipuler les données.
- Les RDD sont immuables : chaque transformation crée un nouveau RDD.
- La persistance (cache/memoization) permet de conserver les données en mémoire pour accélérer les traitements répétés.
Exemple d’usage : Calculer le nombre de mots dans un gros corpus de texte distribué sur plusieurs serveurs.
-
DataFrame et Spark SQL
- Les DataFrames sont des tables de données structurées (colonnes/valeurs), proches des DataFrames Pandas ou des tables SQL.
- On peut manipuler les DataFrames avec une API Python/Scala ou via des requêtes SQL (Spark SQL).
- L’optimiseur Catalyst améliore les performances d’exécution des requêtes.
Exemple d’usage : Charger un fichier CSV massif, filtrer les lignes selon des critères, agréger les résultats via une requête SQL.
-
Spark Streaming
- Spark Streaming permet de traiter des flux de données en temps réel (logs, capteurs, réseaux sociaux…)
- DStream (ancienne API) et Structured Streaming (API moderne) : ingestion, traitement, sortie en temps réel.
- On peut connecter Spark Streaming à Kafka, HDFS, S3, etc.
Exemple d’usage : Détecter des anomalies dans des logs applicatifs en temps réel.
-
-
Interopérabilité et connecteurs
Spark s’intègre facilement avec de nombreux systèmes et formats de données, ce qui en fait un outil central dans les architectures Big Data modernes.- Connecteurs NoSQL & bases distribuées :
- MongoDB : Lecture/écriture directe via le connecteur officiel Spark-MongoDB (idéal pour analyses sur des collections massives).
- Cassandra : Connecteur Spark-Cassandra pour traiter des données distribuées à grande échelle.
- Elasticsearch : Connecteur Spark-Elastic pour indexer ou analyser des documents en temps réel.
- Streaming & ingestion temps réel :
- Kafka : Structured Streaming permet de consommer/produire des flux Kafka pour des pipelines temps réel (logs, IoT, clickstream...)
- Formats de fichiers :
- Lecture/écriture de fichiers Parquet, CSV, JSON, ORC, etc., sur HDFS, S3, ou le système local.
Conseil pratique : Pour des pipelines robustes, privilégier les formats colonne (Parquet/ORC) et utiliser les connecteurs natifs pour la performance et la compatibilité.
Exemple d’usage : Un pipeline Spark lit des données brutes sur HDFS (Parquet), les enrichit via une jointure avec MongoDB, puis écrit les résultats dans Elasticsearch pour visualisation en temps réel.
- Connecteurs NoSQL & bases distribuées :
-
Cas d’usage typiques
Spark est utilisé dans de nombreux contextes Big Data, grâce à sa rapidité et sa flexibilité. Voici quelques scénarios concrets :- Traitement de logs massifs :
- Collecte et analyse de logs applicatifs ou systèmes pour détecter des erreurs, tendances ou tentatives d’intrusion.
- Exemple : Un cluster Spark analyse en continu les logs d’accès web pour générer des rapports de trafic ou alerter en cas de pics d’erreurs.
- Analyse de clickstream :
- Analyse des parcours utilisateurs sur un site web ou une application mobile pour optimiser l’expérience ou personnaliser les recommandations.
- Exemple : Spark Streaming traite les événements de navigation en temps réel pour ajuster les recommandations produits sur un site e-commerce.
- Machine learning distribué (MLlib) :
- Entraînement de modèles de classification, clustering ou régression sur des jeux de données massifs, directement dans le cluster Spark.
- Exemple : Utiliser MLlib pour détecter la fraude bancaire à partir de millions de transactions.
- Batch vs streaming :
- Le mode batch traite de grands volumes de données historiques (ex : reporting mensuel).
- Le mode streaming permet de réagir en temps réel aux nouveaux événements (ex : détection d’anomalies instantanée).
- Exemple : Calculer des statistiques globales chaque nuit (batch) et détecter les fraudes à la volée pendant la journée (streaming).
Grâce à sa polyvalence, Spark s’adapte à tous les besoins : analyse exploratoire, production de dashboards, automatisation de processus data, IA, etc.
- Traitement de logs massifs :
-
Exemples pratiques
Exemple : WordCount avec PySpark
Ce programme compte le nombre d’occurrences de chaque mot dans un fichier texte distribué sur plusieurs nœuds du cluster.
from pyspark import SparkContext sc = SparkContext() # Charger le fichier texte txt = sc.textFile("/data/mon_fichier.txt") # Découper chaque ligne en mots mots = txt.flatMap(lambda ligne: ligne.split()) # Associer chaque mot à 1 paires = mots.map(lambda mot: (mot, 1)) # Additionner les occurrences compte = paires.reduceByKey(lambda a, b: a + b) # Afficher le résultat print(compte.collect()) sc.stop()- flatMap : transforme chaque ligne en une liste de mots
- map : associe chaque mot à la valeur 1
- reduceByKey : additionne les valeurs pour chaque mot
Ce type de traitement illustre la puissance de Spark pour manipuler de grands volumes de texte de façon distribuée et rapide.
Exemple équivalent en Scala :
import org.apache.spark.{SparkConf, SparkContext} val conf = new SparkConf().setAppName("WordCount") val sc = new SparkContext(conf) // Charger le fichier texte val txt = sc.textFile("/data/mon_fichier.txt") // Découper chaque ligne en mots val mots = txt.flatMap(ligne => ligne.split(" ")) // Associer chaque mot à 1 val paires = mots.map(mot => (mot, 1)) // Additionner les occurrences val compte = paires.reduceByKey(_ + _) // Afficher le résultat compte.collect().foreach(println) sc.stop()- flatMap : idem, découpe chaque ligne en mots
- map : associe chaque mot à la valeur 1
- reduceByKey(_ + _) : somme les valeurs pour chaque mot
Ce script Scala est natif dans Spark et très utilisé pour les traitements distribués à grande échelle.
-
🧪 Mini-lab guidé : Analyse de données avec Spark (Python & Scala)
Objectif : Lire un fichier CSV de ventes, calculer le chiffre d'affaires total par produit, et afficher les résultats.
-
Prépare ton environnement
pip install pysparkouconda install pyspark(pour Python)
spark-shellouspark-submit(pour Scala) -
Télécharge ou crée un fichier
ventes.csv(exemple) :
produit,quantite,prix Stylo,10,1.5 Cahier,5,2 Stylo,7,1.5 Livre,3,10 -
Lis le fichier avec Spark :
- Python :
from pyspark.sql import SparkSession spark = SparkSession.builder.appName("MiniLabVentes").getOrCreate() df = spark.read.option("header", True).csv("ventes.csv") df.show() - Scala :
import org.apache.spark.sql.SparkSession val spark = SparkSession.builder.appName("MiniLabVentes").getOrCreate() val df = spark.read.option("header", true).csv("ventes.csv") df.show()
- Python :
-
Calcule le chiffre d'affaires par produit :
- Python :
from pyspark.sql.functions import col, sum as sum_ df = df.withColumn("quantite", col("quantite").cast("int")) df = df.withColumn("prix", col("prix").cast("double")) df = df.withColumn("total", col("quantite") * col("prix")) result = df.groupBy("produit").agg(sum_("total").alias("chiffre_affaires")) result.show() - Scala :
import org.apache.spark.sql.functions._ val df2 = df.withColumn("quantite", col("quantite").cast("int")) .withColumn("prix", col("prix").cast("double")) .withColumn("total", col("quantite") * col("prix")) val result = df2.groupBy("produit").agg(sum("total").alias("chiffre_affaires")) result.show()
- Python :
-
Va plus loin !
Trie les résultats, exporte-les en CSV, ou fais un graphique avec matplotlib (Python) ou Zeppelin (Scala).
Bravo, tu viens de traiter et analyser des données massives comme un pro du Big Data !
-
Prépare ton environnement
-
Quiz et mini-lab
Exercices, examens et projets
Atelier Big Data
Construire un petit pipeline de données et documenter ses choix.
Obligatoire ConsulterExamen Big Data
Évaluer la compréhension de l'architecture et des outils.
Obligatoire ConsulterProjet fil rouge Big Data
Livrer un pipeline reproductible avec ingestion, stockage et restitution.
Livrables :
- Pipeline
- Schéma de données
- Documentation