Aller au contenu

Quiz 02 – Spark Core : RDD, transformations et actions

  • Jour 1
  • 20 questions
  • Seuil de réussite : 70 %
  • 20 flashcards

Contenus évalués : SparkContext et SparkSession ; mode `local[*]` ; RDD immuable, lignée et tolérance aux pannes ; transformations paresseuses et actions ; dépendances narrow et wide ; PairRDD, `filter`, `map`, `count`, `take`, `collect`, `takeOrdered`, `reduceByKey`, `groupByKey`, `join`, `sortBy` ; jobs, stages et tâches découpés par le DAG scheduler ; shuffle et volume échangé sur le réseau ; lecture d'un CSV entre guillemets et diagnostic d'erreurs différées.

Une seule bonne réponse par question. Toutes les valeurs citées sont celles des TP de la formation. Le corrigé détaillé s’affiche après la correction. Ce quiz prépare le QCM de validation des acquis du dernier jour.

Question 1

Au début du TP 2, tu écris sc = spark.sparkContext. Que récupères-tu dans sc ?

Question 2
lignes = sc.textFile("data/trips.csv")
entete = lignes.first()
courses = lignes.filter(lambda l: l != entete)

Après la troisième ligne, que contient lignes ?

Question 3

Tu exécutes ces deux cellules :

paires = champs.map(lambda c: (int(c[7]), float(c[16])))
ca_par_zone = paires.reduceByKey(lambda a, b: a + b)

Elles répondent instantanément, et l'onglet Jobs de la Spark UI ne montre aucun nouveau job. Pourquoi ?

Question 4

map et filter sont des transformations dites narrow. Que signifie ce terme ?

Question 5

Avec le code de la question 2, sur le fichier trips.csv du fil rouge, qu'affiche print(courses.count()) ?

Question 6

Pendant le calcul du top 10 sur un cluster, un Executor tombe. Les partitions de paires qu'il détenait sont perdues. Que fait Spark ?

Question 7

Tu appelles une action sur un RDD. Quelle phrase décrit correctement ce qui se passe ?

Question 8

Combien de stages compte le job déclenché par cette ligne ?

rdd.map(f).filter(g).reduceByKey(h).map(k).count()
Question 9

Dans le bonus du TP 2, tu compares la colonne Shuffle Write de l'onglet Stages. Tu lis environ 480 Ko pour groupByKey().mapValues(sum) et environ 7 Ko pour reduceByKey. Quelle explication est la bonne ?

Question 10

Un participant obtient une liste vide, sans aucun message d'erreur :

zones = (zl.filter(lambda l: l != zl_entete)
           .map(lambda l: next(csv.reader([l])))
           .map(lambda c: (c[0], f"{c[2]} ({c[1]})")))
resultat = sc.parallelize(top10).join(zones).sortBy(lambda kv: -kv[1][0])
resultat.collect()   # []

Quelle est la cause ?

Question 11

Dans le TP 2, la session est créée avec .master("local[*]"). Que signifie l'étoile ?

Question 12

Parmi ces listes, laquelle ne contient que des actions ?

Question 13

À l'étape 2 du TP 2, tu exécutes :

paires = champs.map(lambda c: (int(c[7]), float(c[16])))
paires.take(3)

Que renvoie paires.take(3) ?

Question 14

Pour vérifier paires, l'énoncé utilise take(3). Un participant préfère afficher paires.collect(). Quel est le problème ?

Question 15

Un participant oublie le signe moins à l'étape 4 :

top10 = ca_par_zone.takeOrdered(10, key=lambda kv: kv[1])

Qu'obtient-il dans top10 ?

Question 16

Dans le fichier des zones, csv.reader transforme une ligne en ['132', 'Queens', 'JFK Airport', 'Airports']. Le corrigé construit le nom avec f"{c[2]} ({c[1]})". Quel nom s'affiche en tête du top 10, avec environ 261 823 $ ?

Question 17

Tu veux maintenant le nombre de courses par zone de départ, à partir de paires. Quelle version donne le bon résultat en échangeant le moins de données sur le réseau ?

Question 18

Tu lances courses.count(), puis plus loin ca_par_zone.takeOrdered(10, key=lambda kv: -kv[1]). Dans la Spark UI, le job de takeOrdered relit trips.csv. Pourquoi ?

Question 19

Après resultat.collect() à l'étape 5, l'onglet Stages montre d'autres stages, en plus des 2 stages du calcul du top 10. D'où viennent-ils ?

Question 20

Un participant remplace csv.reader par un split :

zl = sc.textFile("data/taxi_zone_lookup.csv")
zl_entete = zl.first()
zones = (zl.filter(lambda l: l != zl_entete)
           .map(lambda l: l.split(","))
           .map(lambda c: (int(c[0]), f"{c[2]} ({c[1]})")))

La cellule s'exécute sans erreur. Une ValueError apparaît seulement plus loin, sur resultat.collect(). Quel diagnostic est le bon ?

Cliquez sur une carte pour la retourner. Mélangez-les pour une révision active.

1 / 20

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.