Scala PySpark Big Data en pratique : le code et les commandes qui comptent vraiment

Scala PySpark Big Data : l'essentiel en un article — vrai code, schémas et étapes concrètes, extraits d'un cours de 47 leçons.

Scala PySpark Big Data en pratique : le code et les commandes qui comptent vraiment

Pas de théorie interminable ici : on ouvre le terminal et on pratique. Voici l'essentiel de Scala PySpark Big Data, extrait directement d'un cours complet de 47 leçons — avec du vrai code que tu peux copier-coller maintenant.

tl;dr
  • Introduction aux Paradigmes de Programmation
  • Installer l'environnement Big Data
  • Découvrir le Big Data et Spark
  • Fondamentaux de Scala
  • Scala avancé pour Spark
~$ cat ./parcours.md # Scala PySpark Big Data — 12 chapitres
01
Introduction aux Paradigmes de Programmation
→ Le paradigme impératif et procédural→ Le paradigme orienté objet+ 2 autres leçons
02
Installer l'environnement Big Data
→ Installer Java JDK et Scala→ Installer Apache Spark et PySpark+ 2 autres leçons
03
Découvrir le Big Data et Spark
→ Histoire et enjeux du Big Data→ Écosystème Apache Spark+ 1 autres leçons
04
Fondamentaux de Scala
→ Syntaxe de base et types de données→ Fonctions, conditions et boucles+ 2 autres leçons
05
Scala avancé pour Spark
→ Classes, objets et case classes→ Pattern matching et Options+ 4 autres leçons
06
Fondements théoriques de Spark RDD DataFrame Dataset
→ Architecture interne de Spark→ RDD vs DataFrame vs Dataset+ 1 autres leçons
07
RDD Resilient Distributed Datasets
→ C'est quoi un RDD ?→ Transformations et actions sur les RDD+ 1 autres leçons
08
DataFrames et Spark SQL
→ C'est quoi un DataFrame ?→ Opérations et transformations sur les DataFrames+ 2 autres leçons
🏁
Projet final (+ 4 chapitres en chemin)
→ Tu repars avec un projet concret et démontrable

Travaux pratiques Spark complets

NOTEObjectif — Mettre en pratique toutes les notions vues dans le cours à travers des exercices concrets dans le spark-shell (Scala) et PySpark. Ce module est un laboratoire pratique guidé : vous tapez les commandes une par une et vous observez les résultats.
WARNINGRassurez-vous — Ce TP est conçu pour être suivi étape par étape. Chaque commande est expliquée. Vous n'avez pas besoin de tout comprendre immédiatement : l'objectif est de manipuler et de voir les résultats. La compréhension viendra avec la pratique.

Objectifs pédagogiques

TIPÀ l'issue de ce module — Vous serez capable de maîtriser ces compétences essentielles.
NOTEPrérequis — Pour suivre ce TP, vous devez avoir :
  • Spark installé (voir Chapitre 01)
  • Le spark-shell accessible depuis votre terminal
  • Un dossier de travail (exemple : C:/Users/user01/Desktop/SPARK/)

PARTIE 0 – Maîtriser le spark-shell (REPL)

NOTEC'est quoi le spark-shell ? — Le spark-shell est un REPL (Read-Eval-Print Loop) : un terminal interactif où vous tapez une commande Scala, Spark l'exécute immédiatement, et affiche le résultat. C'est l'outil idéal pour apprendre et tester vos commandes Spark rapidement, sans avoir à créer un projet complet.
TIPVariables créées automatiquement — Quand vous lancez spark-shell, Spark crée automatiquement deux variables pour vous :
  • spark : un objet SparkSession (le point d'entrée principal de Spark)
  • sc : un objet SparkContext (utilisé pour créer des RDD)
Vous n'avez pas besoin de les créer vous-même. Ils sont prêts à l'emploi. De plus, import spark.implicits._ est déjà importé automatiquement (ce qui permet d'utiliser .toDF()).

0.1 – Lancer le spark-shell

bash
# Windows (PowerShell) :
spark-shell

# macOS / Linux :
./bin/spark-shell
# Ou si Spark est dans votre PATH :
spark-shell
NOTESpark Web UI — Quand le spark-shell démarre, Spark crée automatiquement une interface web accessible à l'adresse http://localhost:4040. Si le port 4040 est occupé, Spark essaie 4041, 4042, etc. Cette interface vous permet de voir les jobs, les stages et les tâches en cours.

0.2 – Premier test : créer un DataFrame

output
// Tapez ces commandes une par une dans le spark-shell :

scala> import spark.implicits._
// déjà importé automatiquement, mais utile si vous créez votre propre SparkSession

scala> val data = Seq(("Java", "20000"), ("Python", "100000"), ("Scala", "3000"))
// data: Seq[(String, String)] = List((Java,20000), (Python,100000), (Scala,3000))

scala> val df = data.toDF()
// df: org.apache.spark.sql.DataFrame = [_1: string, _2: string]

scala> df.show()
// +------+------+
// |    _1|    _2|
// +------+------+
// |  Java| 20000|
// |Python|100000|
// | Scala|  3000|
// +------+------+
TIPNommer les colonnes — Les colonnes s'appellent _1 et _2 par défaut. Pour leur donner de vrais noms, utilisez .toDF("langage", "offres") :
output
scala> val df = data.toDF("langage", "offres")
scala> df.show()
// +-------+------+
// |langage|offres|
// +-------+------+
// |   Java| 20000|
// | Python|100000|
// |  Scala|  3000|
// +-------+------+

0.3 – Commandes spéciales du spark-shell

WARNINGTrès important — Le spark-shell possède des commandes spéciales qui commencent par : (deux-points). Ces commandes ne sont pas du Scala, elles sont propres au REPL. Apprenez-les, elles vous feront gagner beaucoup de temps !
output
// Afficher l'aide complète (liste de toutes les commandes spéciales)
scala> :help
CommandeDescriptionExemple
:help Affiche la liste de toutes les commandes disponibles :help ou :he
:paste Mode « coller » : permet de coller plusieurs lignes de code d'un coup. Terminez avec Ctrl+D. :paste
:load <fichier> Charge et exécute un fichier .scala ligne par ligne :load hello.scala
:load -v <fichier> Charge un fichier en mode verbose (affiche chaque ligne exécutée) :load -v hello.scala
:quit Quitter le spark-shell proprement :quit ou :q
:history Affiche l'historique des commandes tapées :history ou :history 20
:h? <mot> Rechercher un mot dans l'historique :h? toDF
:require <jar> Ajouter un fichier JAR au classpath pendant la session :require /chemin/vers/mon.jar
:type <expr> Affiche le type d'une expression sans l'exécuter :type 1 + 2Int
:imports Affiche tous les imports actifs dans la session :imports
:implicits Affiche les implicits disponibles :implicits -v
:reset Réinitialise le REPL (efface toutes les variables) :reset
:replay Réinitialise et rejoue toutes les commandes précédentes :replay
:save <fichier> Sauvegarde la session dans un fichier .scala :save ma_session.scala
:sh <cmd> Exécute une commande shell (Unix/macOS uniquement) :sh ls -la
:silent Active/désactive l'affichage automatique des résultats :silent
:javap <class> Désassemble une classe Java / Scala :javap scala.Int
NOTEPourquoi :paste ? — Dans le spark-shell, si vous collez du code multi-lignes directement, le REPL essaie d'exécuter chaque ligne séparément, ce qui provoque des erreurs. Le mode :paste permet de coller un bloc entier de code et de l'exécuter comme un tout.
output
// Étape 1 : tapez :paste et appuyez sur Entrée
scala> :paste
// Entering paste mode (ctrl-D to finish)

// Étape 2 : collez votre code multi-lignes
val noms = Seq("Alice", "Bob", "Charlie")
val rdd = sc.parallelize(noms)
val majuscules = rdd.map(_.toUpperCase)
majuscules.collect()

// Étape 3 : appuyez sur Ctrl+D pour exécuter
// Exiting paste mode, now interpreting.

// noms: Seq[String] = List(Alice, Bob, Charlie)
// rdd: org.apache.spark.rdd.RDD[String] = ...
// majuscules: org.apache.spark.rdd.RDD[String] = ...
// res0: Array[String] = Array(ALICE, BOB, CHARLIE)
WARNINGCtrl+D, pas Ctrl+C ! — Pour terminer le mode :paste, appuyez sur Ctrl+D. Si vous appuyez sur Ctrl+C, vous annulez le code collé.
NOTECas d'usage — Vous avez un fichier .scala contenant des fonctions ou des traitements que vous voulez exécuter dans le spark-shell. Au lieu de tout recopier, utilisez :load.

Étape 1 – Créer le fichier Scala :

bash
# Windows (PowerShell) :
@"
println("Bonjour depuis le fichier Scala !")
val animaux = Seq("chat", "chien", "oiseau")
val rdd = sc.parallelize(animaux)
println("Nombre d'animaux : " + rdd.count())
rdd.collect().foreach(println)
"@ | Out-File -Encoding utf8 "C:\Users\user01\Desktop\SPARK\hello.scala"

# macOS / Linux :
cat > ~/Desktop/SPARK/hello.scala <<'EOF'
println("Bonjour depuis le fichier Scala !")
val animaux = Seq("chat", "chien", "oiseau")
val rdd = sc.parallelize(animaux)
println("Nombre d'animaux : " + rdd.count())
rdd.collect().foreach(println)
EOF

Pratique Spark SQL — AAPL & Income

NOTEObjectif : Appliquer Spark SQL sur deux jeux de données réels — des données boursières Apple (AAPL.csv) et des données de revenus (income.csv) — en utilisant des case class, des RDD, des DataFrame et les fonctions d'agrégation Spark SQL.
TIPPrérequis : Avoir complété la Partie 5 (projet Maven IntelliJ). Spark installé ou accès à un environnement Spark (Databricks, IntelliJ avec Spark, ou spark-shell).

Table des matières

0. Présentation des données & téléchargement

0.1 – Fichier AAPL.csv (données boursières Apple)

NOTELe fichier AAPL.csv contient l'historique des cours de l'action Apple (NASDAQ : AAPL). Chaque ligne représente une journée de transaction.
ColonneTypeDescriptionExemple
dtStringDate de la transaction1984-09-07
openpriceDoublePrix d'ouverture de la journée25.50
highpriceDoublePrix le plus haut de la journée26.10
lowpriceDoublePrix le plus bas de la journée24.80
closepriceDoublePrix de clôture de la journée25.90
volumeDoubleNombre d'actions échangées1234567.0
adjclosepriceDoublePrix de clôture ajusté (dividendes, splits)25.85
NOTE Comment télécharger AAPL.csv — 3 méthodes
Méthode 1 — wget (recommandé, Windows/macOS/Linux)
Télécharge directement le fichier brut depuis GitHub :
bash
wget https://raw.githubusercontent.com/inskillflow/data/refs/heads/main/AAPL.csv
NOTESous Windows PowerShell, utilisez l'alias Invoke-WebRequest si wget n'est pas disponible :
bash
# PowerShell — télécharger AAPL.csv dans le dossier courant
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/inskillflow/data/refs/heads/main/AAPL.csv" -OutFile "AAPL.csv"
NOTEMéthode 2 — git clone (clone tout le dépôt)
Clone le dépôt complet et récupère tous les fichiers de données :
bash
# Cloner le dépôt inskillflow/data
git clone https://github.com/inskillflow/data.git

# Le fichier AAPL.csv sera dans :
#   data/AAPL.csv
TIPMéthode 3 — Interface GitHub (sans terminal)
  1. Ouvrez https://github.com/inskillflow/data/blob/main/AAPL.csv
  2. Cliquez sur le bouton « Raw » en haut à droite du fichier
  3. Faites Ctrl+S (ou Cmd+S sur Mac) pour sauvegarder la page sous le nom AAPL.csv
Lien direct vers le fichier brut :
https://raw.githubusercontent.com/inskillflow/data/refs/heads/main/AAPL.csv
NOTEPlacement du fichier après téléchargement : Placez AAPL.csv dans un dossier accessible, puis adaptez le chemin dans votre code :
  • Windows : C:\Users\VotreNom\Desktop\Spark\AAPL.csv
  • Linux / macOS : /home/utilisateur/data/AAPL.csv
  • Spark Shell (chemin relatif) : ./AAPL.csv

0.2 – Fichier Income.csv (données de revenus)

ColonneTypeDescription
idDoubleIdentifiant unique
workclassStringCatégorie d'emploi (Private, Self-emp, Gov...)
educationStringNiveau d'éducation
maritalstatusStringStatut matrimonial
occupationStringProfession
relationshipStringRelation familiale
raceStringOrigine ethnique
genderStringGenre
nativecountryStringPays d'origine
incomeStringTranche de revenu (<=50K ou >50K)
ageDoubleÂge de l'individu
fnlwgtDoublePoids de pondération statistique
educationalnumDoubleNombre d'années d'éducation
capitalgainDoubleGains en capital
capitallossDoublePertes en capital
hoursperweekDoubleHeures de travail par semaine
NOTE Comment télécharger Income.csv — 3 méthodes
Méthode 1 — wget
bash
wget https://raw.githubusercontent.com/inskillflow/data/refs/heads/main/Income.csv
NOTESous Windows PowerShell :
bash
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/inskillflow/data/refs/heads/main/Income.csv" -OutFile "Income.csv"
NOTEMéthode 2 — git clone (clone les deux fichiers en même temps)
bash
# Si vous avez déjà cloné le dépôt pour AAPL.csv, Income.csv est déjà présent
# Sinon :
git clone https://github.com/inskillflow/data.git
# Le fichier Income.csv sera dans :  data/Income.csv

Pattern matching et Options

NOTEObjectif — Maîtriser le pattern matching, l'outil le plus puissant de Scala pour comparer, trier et déconstruire des données. Découvrir le type Option[T] qui élimine les NullPointerException, et aller plus loin avec Either et les for-comprehensions.
WARNINGRassurez-vous — Le pattern matching est simplement l'équivalent d'un switch/case en Java ou d'un match en Python 3.10+, mais en beaucoup plus puissant. Si vous connaissez déjà if/elif/else en Python, vous comprendrez sans difficulté. Scala ajoute la possibilité de vérifier des types, d'extraire des données d'objets et de poser des conditions — le tout dans une syntaxe claire et compacte.

Objectifs pédagogiques

TIPÀ l'issue de ce module — Vous serez capable de maîtriser ces compétences essentielles.

1. L'analogie du tri postal

Imaginez un centre de tri postal. Chaque lettre arrive sur un tapis roulant. Un employé regarde l'adresse et envoie la lettre dans la bonne boîte : Paris à gauche, Lyon à droite, Marseille tout droit. Si l'adresse ne correspond à rien de connu, la lettre part dans une boîte « Autres ».

Le pattern matching fonctionne exactement comme ce tri postal : on examine une valeur, on la compare à plusieurs modèles (patterns), et on exécute le code associé au premier modèle qui correspond.

TIPPourquoi c'est mieux qu'un if/else — Le pattern matching est plus lisible, plus sûr (le compilateur vérifie que tous les cas sont couverts avec les sealed trait) et bien plus puissant, car il peut déconstruire des objets complexes, extraire des valeurs, et combiner type + valeur + condition dans un seul case.

2. La syntaxe match/case

L'expression match prend une valeur et la compare à une série de clauses case. La première clause qui correspond est exécutée. Contrairement au switch Java, il n'y a pas de break à écrire — Scala s'arrête automatiquement au premier cas correspondant.

NOTEConcept clé — En Scala, match est une expression, pas une instruction. Cela signifie qu'il retourne toujours une valeur. On peut donc écrire val x = valeur match { ... }.

Exemple 1 : les jours de la semaine

output
val jour = "Mercredi"

val typeJour = jour match {
  case "Lundi" | "Mardi" | "Mercredi" | "Jeudi" | "Vendredi" =>
    "Jour ouvré"
  case "Samedi" | "Dimanche" =>
    "Week-end"
  case _ =>
    "Jour inconnu"  // _ = la boîte "Autres" du tri postal
}

println(typeJour)  // "Jour ouvré"
NOTELe joker _ — Le symbole _ (underscore) correspond à « tout le reste ». Il doit toujours être placé en dernier, car il attrape tout. Sans lui, si aucun case ne correspond, Scala lève une exception MatchError à l'exécution.

Exemple 2 : convertir une note en mention

output
val note = 15

val mention = note match {
  case 20                 => "Parfait"
  case 16 | 17 | 18 | 19 => "Très bien"
  case 14 | 15            => "Bien"
  case 12 | 13            => "Assez bien"
  case 10 | 11            => "Passable"
  case _                  => "Insuffisant"
}

println(mention)  // "Bien"

En Java ou Python, un switch ou match est une instruction : il fait quelque chose mais ne retourne pas de valeur directement. En Scala, match est une expression : il retourne toujours une valeur.

Ce que ça change concrètement :

output
// Scala : match est une expression, on peut l'assigner directement
val categorie = age match {
  case a if a < 18  => "Mineur"
  case a if a < 65  => "Adulte"
  case _            => "Senior"
}

// On peut aussi l'utiliser comme argument d'une fonction
println(age match {
  case a if a < 18 => "Mineur"
  case _           => "Adulte"
})

// Ou dans une interpolation de string
val message = s"Statut : ${age match {
  case a if a < 18 => "Mineur"
  case _           => "Adulte"
}}"
output
// Java : le switch (avant Java 14) ne retourne pas de valeur
// Il fallait écrire :
String categorie;
switch (age) {
  case ...: categorie = "Mineur"; break;
  default:  categorie = "Adulte";
}
// Java 14+ a ajouté les switch expressions pour combler ce manque
TIPRègle pratique — Comme match retourne une valeur, le compilateur vérifie que tous les branches retournent le même type. Si un case retourne un String et un autre un Int, Scala infère le type commun (Any). C'est souvent signe d'une erreur de conception.
output
# Python 3.10+ structural pattern matching
jour = "Mercredi"
match jour:
    case "Lundi" | "Mardi" | "Mercredi" | "Jeudi" | "Vendredi":
        type_jour = "Jour ouvre"
    case "Samedi" | "Dimanche":
        type_jour = "Week-end"
    case _:
        type_jour = "Jour inconnu"

# Difference : en Python, match est une instruction (pas d'assignation directe)
# En Scala : val x = valeur match { ... }  <-- expression qui retourne une valeur
# En Python : vous devez assigner dans chaque branche manuellement
output
# Python < 3.10 : pas de match/case, on utilise if/elif/else
jour = "Mercredi"

if jour in ("Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi"):
    type_jour = "Jour ouvre"
elif jour in ("Samedi", "Dimanche"):
    type_jour = "Week-end"
else:
    type_jour = "Jour inconnu"
va-plus-loin

Cet article couvre les extraits les plus utiles — le cours complet Scala PySpark Big Data (13 chapitres, 47 leçons, exercices corrigés et projet final) t'emmène jusqu'au bout.

./acceder-au-cours-complet cours gratuit : Maîtriser Claude Code

FAQ

Combien de temps pour apprendre Scala PySpark Big Data ?
Avec une progression structurée (13 chapitres, 47 leçons courtes et pratiques), on atteint un niveau opérationnel en quelques semaines à raison de 30 à 60 minutes par jour. L'important est de pratiquer chaque notion immédiatement.
Faut-il des prérequis ?
Des bases en informatique suffisent. Si tu sais utiliser un terminal et lire du code simple, tu es prêt.
Par où commencer concrètement ?
Reproduis les commandes de cet article, puis suis le cours complet Scala PySpark Big Data : il enchaîne les 47 leçons dans l'ordre, avec exercices et projet final.

📬 Tu veux recevoir ce type de guide chaque semaine ? Abonne-toi gratuitement — code réel, zéro blabla.