Partie 4 – Écosystème, architectures et conclusion
Et si on devait concevoir demain l'architecture de données de notre application de taxis ?
Deep Learning et transfer learning avec Spark
Section intitulée « Deep Learning et transfer learning avec Spark » Modèle pré-entraîné Couches gelées Nouvelle tête ex. ResNet, 14 millions ──► le savoir général : ──► votre problème d'images (ImageNet) formes, textures (quelques milliers d'exemples)Transfer learning : on réutilise ce qu’un modèle a appris sur un énorme jeu de données. Un réseau entraîné sur ImageNet sait déjà reconnaître bords, textures et formes ; on gèle ces couches et on n’entraîne qu’une petite « tête » pour son problème (classer des photos de véhicules, d’état de chaussée, de reçus). Quelques milliers d’exemples suffisent au lieu de millions.
Le rôle de Spark : il n’entraîne pas lui-même les réseaux de neurones.
| Besoin | Outil Spark |
|---|---|
| Préparer à grande échelle (images, texte) | Source binaryFile |
| Inférence distribuée | predict_batch_udf, pandas UDF |
| Entraînement distribué | TorchDistributor (PyTorch), Spark 3.4+ |
Schéma d’usage (illustratif : le modèle de vision et la bibliothèque d’inférence sont à votre choix) :
from pyspark.sql.types import IntegerTypefrom pyspark.ml.functions import predict_batch_udf
def fabrique(): # appelée UNE fois par Executor : charge le modèle modele = charger_un_modele_de_vision() # par ex. torchvision, ONNX Runtime… def predire(lot): # lot : numpy array de 64 images return modele.classer(lot) # renvoie un tableau de 64 entiers return predire
classer = predict_batch_udf(fabrique, return_type=IntegerType(), batch_size=64)images = spark.read.format("binaryFile").load("data/images/")images.withColumn("classe", classer("content")).show() # en parallèle sur le clusterR avec Spark : SparkR et sparklyr
Section intitulée « R avec Spark : SparkR et sparklyr »| SparkR : inclus dans Spark | sparklyr : l’alternative maintenue |
|---|---|
API R officielle : SparkDataFrame, SQL, MLlib | Projet Posit (ex-RStudio), communauté active |
sparkR.session(), read.df(), spark.glm()… | Syntaxe dplyr : filter(), group_by(), summarise() |
| Déprécié depuis Spark 4.0 : « SparkR is deprecated and will be removed in a future version » | Traduit en Spark SQL : Catalyst optimise |
| À savoir lire dans l’existant, pas pour un nouveau projet | Accès à MLlib : ml_random_forest(), ml_kmeans()… |
SparkR existe depuis Spark 1.4. Pour une équipe R aujourd’hui, sparklyr est le choix recommandé : le code dplyr est traduit en SQL Spark, donc optimisé comme le reste.
Lambda ou Kappa ?
Section intitulée « Lambda ou Kappa ? » Lambda : deux chemins Kappa : un seul chemin
┌─► Batch (exact, toutes les nuits) ─┐ Journal Streaming Source ────┤ ├─► Service (Kafka, ─► (un seul ─► Service événements └─► Speed (streaming, rapide) ───────┘ rejouable) code)
Recalculer = rejouer le journal avec le nouveau code| Lambda | Kappa | |
|---|---|---|
| Code | 2 versions à maintenir | 1 seul code |
| Recalcul | Batch complet, simple | Rejouer le journal |
| Idéal pour | Rapports exacts + temps réel | Événements, temps réel d’abord |
| Origine | Nathan Marz | Jay Kreps |
Lambda : une couche batch recalcule tout, exactement, périodiquement ; une couche speed donne une vue approximative en temps réel ; la couche service fusionne. Inconvénient : deux codes à garder cohérents. Kappa : tout est flux, les événements sont gardés dans un journal rejouable ; pour recalculer, on rejoue le journal avec le nouveau code.
Avec Spark, la frontière s’estompe : la même API sert le batch et le streaming, et availableNow permet de lancer un
« streaming » comme un batch planifié. Vous avez déjà construit les deux couches : le batch du jour 1 et le streaming
du jour 3, avec la même API.
Atelier – Lambda ou Kappa pour notre application de taxis ? (30 min, en groupes de 3).
Ce qu’il faut retenir des 3 jours
Section intitulée « Ce qu’il faut retenir des 3 jours »Faites reformuler chaque idée par un participant différent. Reprenez la liste des attentes notées au jour 1 : cochez celles qui sont couvertes ; pour les autres, donnez une piste (documentation, ressource).
| Idée | En une phrase | |
|---|---|---|
| 1 | Diviser pour régner | Partitions, DAG, évaluation paresseuse : 1 shuffle = 1 stage. |
| 2 | DataFrames + Catalyst | Écrire en SQL ou DataFrame ; Parquet ; lire le plan. |
| 3 | Pipeline ML | fit / transform, train / test, la bonne métrique, pas de fuite. |
| 4 | Flux = table sans fin | Fenêtres, watermark, checkpoint : temps réel fiable. |
| 5 | Une seule API | Batch, ML et streaming : choisir l’architecture selon le besoin. |
Pour aller plus loin : la documentation officielle (guides SQL, MLlib, Structured Streaming), le dépôt de la formation et ses bonus, la page Ressources. La semaine prochaine : choisissez un cas de votre métier et refaites le fil rouge dessus. Cette question « comment je vais l’appliquer » prépare celle du questionnaire : « Pensez-vous pouvoir mettre en pratique ces compétences dans les semaines à venir ? »
QCM de validation des acquis, puis questionnaire de satisfaction (16h00 – 16h20)
Section intitulée « QCM de validation des acquis, puis questionnaire de satisfaction (16h00 – 16h20) »À 16h, deux questionnaires sont envoyés automatiquement, à remplir dans cet ordre :
- QCM de validation des acquis : vérifie la maîtrise des objectifs de la formation. C’est aussi le moment de poser les dernières questions.
- Questionnaire de satisfaction : deux questions essentielles : avez-vous acquis de nouvelles compétences ? Pensez-vous pouvoir les mettre en pratique dans les semaines à venir ?
Les réponses du QCM ne sont pas commentées pendant la passation ; les questions difficiles sont reprises juste après.
Conclusion (16h25 – 16h50)
Section intitulée « Conclusion (16h25 – 16h50) »Tour de table : chacun complète au moins une case de chaque colonne.
| Les éléments à conserver | Les éléments à revoir |
|---|---|
| Ce que j’ai appris | Ce qui m’a manqué |
| Ce que j’ai apprécié | Ce qui m’a ennuyé ou déplu |
| Comment je me projette | Ce que je changerais |
Les retours alimentent l’amélioration continue du programme. Le site et le dépôt restent accessibles après la
formation, et les corrigés de tous les TP sont publiés sur la branche participants du dépôt.
Dépôt des participants : formations2026/formation-spark-ml (branche participants)
Contenu pédagogique © Ambient IT · 140 Avenue Jean Lolive, 93500 Pantin · formation@ambient-it.net · +33 (0)1 48 10 09 46
Organisme de formation enregistré sous le numéro 11 75 54743 75. Cet enregistrement ne vaut pas agrément de l'État.