AccueilBlogTest technique Spark
Guide recrutement data

Test technique Spark : ce qu'on évalue vraiment en entretien

Spark reste la référence du traitement distribué. Mais entre lancer un groupBy et diagnostiquer un skew qui fait exploser un job, l'écart de niveau est considérable. Voici ce qu'on évalue.

Data Builder·Juillet 2025·11 min de lecture·Data Engineer

Spark récompense ceux qui comprennent ce qui se passe sous l'API : lazy evaluation, shuffle, partitionnement. Un profil solide raisonne en coût de calcul distribué, pas en lignes de code. Cinq dimensions.

1Modèle d'exécution

Question discriminante

Différence entre une transformation et une action — et pourquoi ça change tout ?

  • Lazy evaluation : les transformations construisent un plan, rien ne s'exécute avant une action.
  • Le DAG est découpé en jobsstagestasks.
  • Les stages sont séparés par les shuffles.
  • Comprendre ça, c'est pouvoir lire le Spark UI et anticiper les coûts.

2Shuffle et partitionnement

Question discriminante

Qu'est-ce qu'un shuffle, et pourquoi c'est le nerf de la performance Spark ?

  • Transformations narrow (map, filter) vs wide (groupBy, join) qui déclenchent un shuffle.
  • repartition (shuffle, augmente) vs coalesce (sans shuffle, réduit).
  • Le skew : une clé sur-représentée qui sature une tâche.
  • Choisir le nombre de partitions selon le volume et les cœurs disponibles.

Signal d'alerte : un candidat qui ne sait pas ce qu'est un shuffle ne pourra jamais optimiser un job Spark — éliminatoire sur un poste d'ingénierie.

3Jointures et optimisation

Question discriminante

Comment joindre efficacement une grosse table de faits avec une petite table de référence ?

from pyspark.sql import functions as F big.join(F.broadcast(small), 'key') # évite le shuffle de la grosse table
  • Broadcast join : diffuser la petite table pour éviter un shuffle coûteux.
  • Sort-merge join par défaut sur deux grosses tables.
  • Gérer le skew de jointure (salting, ou skew join d'AQE).
  • AQE (Adaptive Query Execution) ajuste le plan à l'exécution.

4Fonctions fenêtre et agrégations

Question discriminante

Comment obtenez-vous le top-N par catégorie en PySpark ?

from pyspark.sql import Window, functions as F w = Window.partitionBy('categorie').orderBy(F.desc('ventes')) df.withColumn('r', F.row_number().over(w)).filter('r <= 3')
  • Window.partitionBy(...).orderBy(...) pour classements et cumuls.
  • groupBy().agg() pour les agrégats distribués.
  • Préférer les fonctions natives aux UDF Python (coûteuses, hors optimiseur).
  • Pandas UDF (vectorisées) quand une UDF est inévitable.

5Performance et production

Question discriminante

Un job Spark est lent ou tombe en OOM. Par quoi commencez-vous ?

  • Lire le Spark UI : stages longs, skew, spill disque.
  • cache/persist à bon escient (réutilisation, pas systématique).
  • Formats colonnes (Parquet) + partition pruning pour lire moins.
  • Dimensionner exécuteurs et mémoire ; éviter la collecte massive au driver.

6Grille par niveau

NiveauMaîtrise attendueSignal GONO-GO
JuniorDataFrame API, transformations de baseÉcrit un groupBy/join correct, distingue transfo/actionCollecte tout au driver (collect)
ConfirméShuffle, partitionnement, broadcast join, fenêtresExplique un shuffle, utilise un broadcast joinNe sait pas ce qu'est un shuffle
SeniorSkew, AQE, tuning mémoire, Spark UIDiagnostique un skew et un spill dans le Spark UIAbuse des UDF Python sans mesurer le coût
LeadArchitecture distribuée, coûts cluster, standardsOptimise le coût/perf global, fixe les bonnes pratiquesNe peut pas expliquer le découpage jobs/stages/tasks

Vous recrutez un profil data ?

Data Builder mène l'entretien technique et vous livre un rapport clair et détaillé sous 24h. Premier entretien offert.

Tester gratuitementRéserver un appel