Aller au contenu

TP 1 – Premier contact avec Spark 4

  • 30 min · 10h00 – 10h30
  • Notebook : jour1/TP1_premier_contact.ipynb
  • Données : data/trips.csv, data/trips.parquet

Objectif : avoir une SparkSession qui fonctionne, charger le fil rouge et lire la Spark UI.

Réussi si : 120 000 courses comptées, le schéma affiché, et vous savez retrouver vos jobs dans la Spark UI.

Ouvrez le notebook depuis la racine du dépôt : les chemins sont relatifs à data/. La première cellule remonte automatiquement jusqu’au dossier qui contient data/.

1. Créer une SparkSession en local, avec tous les cœurs

Section intitulée « 1. Créer une SparkSession en local, avec tous les cœurs »
from pyspark.sql import SparkSession
spark = (SparkSession.builder
.appName("TP")
.master("local[*]")
.getOrCreate())
sc = spark.sparkContext
print("Spark", spark.version, "—", spark.sparkContext.uiWebUrl)

2. Charger data/trips.csv (avec en-tête) et compter les lignes

Section intitulée « 2. Charger data/trips.csv (avec en-tête) et compter les lignes »

Indice : spark.read.csv(chemin, header=True, inferSchema=True) puis .count().

Indice : printSchema(), puis df.select("tpep_pickup_datetime", "PULocationID", "trip_distance", "total_amount").show(5).

  • Combien de jobs voyez-vous ? inferSchema=True relit le fichier pour deviner les types : la lecture crée elle-même des jobs, avant votre count(). Avec header=True, Spark lance aussi un petit job pour lire la première ligne.
  • Cliquez sur le job du count() : il a 2 stages (un compte par partition, puis l’addition des comptes). Combien de tâches dans le premier ? Comparez avec df.rdd.getNumPartitions().
  • Si le port 4040 est déjà pris (un autre notebook ouvert), Spark utilise 4041 : le bon lien est spark.sparkContext.uiWebUrl.

Chronométrez un count() sur data/trips.csv puis sur data/trips.parquet. Lequel est le plus rapide, et pourquoi ? (Format colonne, compressé, schéma embarqué : pas d’inférence.)

🔍 Comprendre sous le capot : Pourquoi voyez-vous 3 jobs dans la Spark UI alors que vous n'avez écrit qu'un seul .count() ?

Quand vous exécutez spark.read.csv("data/trips.csv", header=True, inferSchema=True) suivi de df.count(), ouvrez http://localhost:4040 : vous voyez 3 jobs distincts !

  1. Job 0 (csv at ...) — Lecture de l’en-tête (header=True) : Spark lance un mini-job d’une seule tâche qui ne lit que la 1re ligne du fichier pour connaître le nom des 19 colonnes (VendorID, tpep_pickup_datetime…).
  2. Job 1 (csv at ...) — Inférence du schéma (inferSchema=True) : un fichier CSV est du pur texte. Pour deviner que trip_distance est un double et PULocationID un int, Spark est obligé de parcourir tout le fichier une première fois !
  3. Job 2 (count at ...) — Votre action df.count() : Spark parcourt enfin le fichier pour compter les 120 000 lignes (en 2 stages : chaque tâche compte sa partition, puis un second stage additionne les sous-totaux).

Sur data/trips.parquet : le nom et le type des colonnes, ainsi que le nombre exact de lignes, sont déjà écrits dans le pied de page (footer) binaire du fichier Parquet. Spark n’a besoin d’aucun job d’inférence et répond quasi instantanément !

SymptômeCauseSolution
PATH_NOT_FOUND … jour1/data/trips.csvLe chemin relatif est résolu depuis jour1/Exécuter la première cellule, ou ouvrir le notebook depuis la racine
Colonnes _c0 à _c18, 120 001 lignesheader=True oubliéL’en-tête a été lu comme une donnée
Toutes les colonnes en stringinferSchema absentNormal : sans inférence, Spark ne devine aucun type
sc.master reste local[*] après avoir demandé local[2]getOrCreate() renvoie la session déjà activespark.stop() ou redémarrer le noyau
ModuleNotFoundError: pyspark dans VS Code (WSL2)VS Code utilise le Python de WindowsExtension WSL, « Connect to WSL », choisir le noyau du .venv

Le corrigé est publié en fin de journée (voir l’encadré « Dans le dépôt » en haut de page). Il existe en deux formes : le notebook, pour relire pas à pas, et le script .py, exécutable d’un bloc. Attention : le script se termine par spark.stop(), donc son lien Spark UI ne mène plus à rien une fois le script terminé. Pour explorer les jobs, gardez votre session ouverte dans le notebook.

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.

v 6264cf4