AccueilBlogTest Spark
Tests prêts à l'emploi

Test Spark : un exercice de traitement distribué avec ses pièges de performance

Ce test vérifie si un candidat comprend vraiment le calcul distribué, ou s'il a juste « fait du Spark ». On donne un traitement simple en apparence, mais qui cache un piège de performance classique : la jointure d'une grosse table avec une petite. Corrigé et signaux inclus.

Data Builder·Juillet 2025·10 min de lecture·Test Spark · data engineering · performance

Le cœur du test : la conscience du shuffle (déplacement de données entre machines). Un vrai profil sait qu'une jointure naïve entre grosse et petite table déclenche un shuffle coûteux, évitable par un broadcast.

1L'exercice

La consigne

« Calcule le CA par catégorie : une grosse table de commandes, une petite table de produits. »

Commandes fait des milliards de lignes ; produits en fait quelques milliers. Le candidat doit joindre les deux et agréger — en évitant le piège de performance.

commandes : ~1 milliard de lignes (produit_id, montant) produits : ~5 000 lignes (id, categorie) -- Objectif : CA total par categorie

    2Le piège de performance

    La consigne

    Une jointure naïve déclenche un shuffle massif.

    Par défaut, Spark redistribue les deux tables sur le cluster pour les joindre (sort-merge join) : sur un milliard de lignes, c'est très coûteux. La petite table peut au contraire être diffusée (broadcast) à tous les nœuds.

    • Piège : laisser Spark faire un sort-merge join qui shuffle la grosse table.
    • Bon réflexe : broadcaster la petite table pour éviter le shuffle.
    • Red flag : utiliser .collect() sur un milliard de lignes (fait tout planter).

    3Le corrigé

    La consigne

    Un broadcast join, et une agrégation propre.

    La solution efficace diffuse la petite table de produits, ce qui évite de déplacer la grosse table. Le candidat doit expliquer pourquoi — c'est ça qu'on évalue.

    from pyspark.sql import functions as F resultat = ( commandes .join(F.broadcast(produits), commandes.produit_id == produits.id) .groupBy("categorie") .agg(F.sum("montant").alias("ca")) ) # broadcast(produits) evite de shuffler le milliard de lignes de commandes.
    • Broadcast de la petite table : pas de shuffle de la grosse.
    • Agrégation par catégorie après la jointure.
    • Aucun collect() : tout reste distribué.

    Signal d'alerte : le vrai marqueur : le candidat sait expliquer pourquoi le broadcast évite le shuffle. Réciter « j'utilise broadcast » sans comprendre le shuffle ne suffit pas — creusez le pourquoi.

    4Grille par niveau

    NiveauMaîtrise attendueSignal GONO-GO
    JuniorÉcrit une jointure qui fonctionneObtient le bon résultatUtilise collect() sur un gros volume
    ConfirméConnaît le broadcast joinBroadcaste la petite tableLaisse un shuffle massif se produire
    SeniorExplique le shuffleJustifie le broadcast par le coûtApplique broadcast sans comprendre
    LeadOptimise et diagnostique via la Spark UISait aussi quand Spark est inutileAjoute Spark là où un script suffirait

    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