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.)

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.