Aller au contenu

Partie 1 – Big Data, calcul distribué et premiers pas avec Spark 4

  • 9h20 – 10h30
  • Apports : 40 min
  • TP 1 : 30 min

Et si vous deviez analyser 10 ans de courses de taxi… avec Excel ? Comment feriez-vous ?

Le problème : quand une seule machine ne suffit plus

Section intitulée « Le problème : quand une seule machine ne suffit plus »

Excel plafonne à un million de lignes. pandas charge tout en mémoire. Une base SQL tient sur un serveur. Trois limites d’une même idée : une seule machine. Le Big Data, ce sont les situations où cette machine ne suffit plus :

Les 3 VCe que ça veut direSur notre fil rouge
VolumeDes téraoctets, au-delà de la RAM et du disque d’un serveur3 millions de courses par mois, 10 ans d’historique
VélocitéDes données qui arrivent en continuChaque course est enregistrée au moment où elle se termine
VariétéLogs, JSON, images, tablesCourses (CSV, Parquet), zones (référentiel), logs applicatifs (texte)

Acheter un serveur plus gros (scale up) coûte vite très cher et atteint une limite physique. La solution est de répartir le travail sur plusieurs machines ordinaires (scale out) :

  1. Découper les données en partitions.
  2. Envoyer le calcul là où sont les données, plutôt que les données vers le calcul.
  3. Traiter les partitions en parallèle sur N machines.
  4. Tolérer les pannes : si une machine tombe, on recalcule sa partition ailleurs.

Analogie : pour compter les habitants d’une ville, on n’envoie pas un seul recenseur. On envoie un recenseur par quartier, puis on additionne.

Le calcul distribué existait avant Spark : Hadoop MapReduce (2006) découpe un traitement en phases map et reduce et écrit sur disque entre chaque phase. Pour un traitement en une passe, c’est acceptable. Pour un algorithme itératif – le Machine Learning fait des dizaines de passes sur les mêmes données – c’est rédhibitoire.

Spark (Berkeley, 2009) garde les résultats intermédiaires en mémoire : jusqu’à 100 fois plus rapide sur les traitements itératifs. Il ajoute une API unifiée – SQL, DataFrames, Machine Learning, streaming, graphes – en Python, Scala, Java, R et SQL, avec un seul moteur d’exécution. Spark ne remplace pas HDFS : il lit et écrit dessus, comme sur S3, ADLS ou une base de données.

MapReduce : Map ──▶ disque ──▶ Reduce ──▶ disque ──▶ Map ──▶ disque …
Spark : Étape 1 ──▶ mémoire ──▶ Étape 2 ──▶ mémoire ──▶ Étape 3 …
VersionCe qu’elle a apporté
Spark 3.0 – 3.5 (2020 – 2023)AQE (optimisation adaptative, activé par défaut depuis 3.2), Pandas API on Spark, Kubernetes en production, Spark Connect (3.4). 3.5 est la version LTS, maintenue jusqu’en 2027.
Spark 4.0 (mai 2025)ANSI SQL par défaut : une division par zéro ou un cast invalide lève une erreur au lieu de produire un NULL silencieux. Type VARIANT pour le JSON semi-structuré (jusqu’à 8× plus rapide que les chaînes). Java 17+, Scala 2.13. Mesos supprimé. Spark Connect quasi complet. SparkR déprécié.
Spark 4.1 (2026)Pipelines déclaratifs (Declarative Pipelines), mode temps réel du Structured Streaming (latence en millisecondes).

Deux changements de Spark 4 cassent du code existant : le mode ANSI (le bonus 2 du TP 4 vous le fera toucher du doigt avec try_divide) et la suppression de Mesos (migration vers Standalone, YARN ou Kubernetes).

Spark est écrit en Scala et tourne sur la JVM : il faut un Java 17 ou 21. PySpark est le paquet Python qui embarque Spark et le pilote depuis Python.

Fenêtre de terminal
# 1. Vérifier Java 17 (ou 21)
java -version
# 2. Installer PySpark (inclut Spark) et Jupyter
pip install pyspark jupyter
# 3. Dans un notebook (VS Code ou Jupyter)
from pyspark.sql import SparkSession
spark = (SparkSession.builder
.appName("decouverte")
.master("local[*]")
.getOrCreate())
spark.range(1_000_000).count()
print(spark.sparkContext.uiWebUrl) # 4. Spark UI : http://localhost:4040
  • local[*] : Spark utilise tous les cœurs de votre machine, dans un seul processus, sans cluster. local[2] en utiliserait deux.
  • Standalone : Spark seul, sans Hadoop ni YARN. C’est le mode du TP 3.
  • La Spark UI (port 4040, ou 4041 si le port est pris) montre chaque job, ses stages et ses tâches. Le lien fiable est spark.sparkContext.uiWebUrl.

Toute la journée travaille sur data/trips.csv et data/trips.parquet (120 000 courses, format officiel NYC TLC) et sur le référentiel data/taxi_zone_lookup.csv. Les 5 colonnes utiles aujourd’hui : tpep_pickup_datetime, PULocationID, trip_distance, total_amount, et la table des zones (LocationID → Borough, Zone).

TPQuestionAvec quoi
TP 1Charger et explorerSparkSession, Spark UI
TP 2Top 10 des zonesRDD, PairRDD
TP 3Le même job sur un cluster + HDFSStandalone, spark-submit, HDFS
TP 4Le même job en Spark SQLDataFrames, SQL

Le détail du jeu de données est sur la page Le fil rouge.

→ TP 1 – Premier contact (30 min)

Transition : « 120 000 lignes, ça passe sur un portable. Et 3 milliards ? Ouvrons le capot : que fait vraiment Spark quand vous lancez count() ? » → Partie 2 – Spark Core

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.