Lab Apache Spark : apprendre les DataFrames et Spark SQL sur un fichier CSV
Ce lab donne à chaque élève un petit Apache Spark à lui, avec un fichier CSV de 24 commandes déjà chargé comme DataFrame. Spark est un outil pour travailler sur des tables de données en découpant le travail en jobs ; l’élève lui pose des questions de deux façons, avec du code DataFrame et avec du SQL, puis ouvre la Spark UI pour voir ce qu’il a fait.
Ce n’est pas un lab d’attaque. Chaque copie n’a aucun accès à internet ni à aucun autre élève : rien ne peut y être téléchargé et rien n’y peut atteindre quelqu’un d’autre.
Ce que les élèves apprennent
Ce qu’est un DataFrame : une table que Spark lit dans un fichier, avec ses colonnes et les types que Spark en déduit. Puis filter pour garder certaines lignes, groupBy et count pour les résumer, et la même question posée en SQL sur une table du même nom. Ils voient que les deux façons produisent le même genre de plan, et que chaque requête qui doit lire les données devient un job qu’on retrouve dans la Spark UI, sous l’onglet Jobs et sous l’onglet SQL / DataFrame. Il convient aux introductions à l’ingénierie des données, au big data et aux bases de données ; vérifiez la formulation exacte dans l’unité de votre propre organisme certificateur, aucune n’est citée ici.
Le lancer dans votre navigateur
Le lab démarre un seul service, spark, et attend qu’il ait chargé le fichier, ce qui prend environ six secondes. C’est Spark en mode local : un seul processus qui contient le pilote et ses threads de travail, ce qui tient dans la mémoire d’une copie. Il n’y a ni maître ni worker à démarrer ou à arrêter. Le terminal n’a pas de Spark à lui : le service répond donc aussi sur le port 8000, et curl envoie une requête SQL à /sql, ou une expression DataFrame à /df, et affiche le résultat sous forme de tableau.
- Ouvrir la page Conteneur. Ouvrez « Créer » dans la barre et choisissez « Lancer un conteneur ». Tout le monde peut ouvrir la page, et le lab Git et le lab SQL se lancent sans compte. Tous les autres labs demandent un compte gratuit : créez-en un, connectez-vous, puis appuyez sur « Démarrer ».
- Trouver le lab. La carte « Laboratoires d’exemple » liste tous les exemples. Trouvez Apache Spark : DataFrames et SQL.
- Appuyer sur Démarrer. « Démarrer » le lance tel quel, en un clic. « Modifier le fichier d’abord » ouvre le fichier compose pour que vous puissiez le changer avant de démarrer.
- L’ouvrir. Sur la page du lab, la barre du lab a un lien nommé Spark UI : appuyez dessus pour voir la Spark UI dans votre navigateur, avec ses onglets Jobs, Stages et SQL / DataFrame. Appuyez ensuite sur « Ouvrir le terminal » et tapez curl -s -d 'SELECT * FROM orders LIMIT 5' http://spark:8000/sql pour voir les cinq premières commandes. orders.count() envoyé à /df répond 24.
Que demander aux élèves de rendre
Le résultat d’une requête qu’ils ont écrite eux-mêmes sur le fichier, comme le chiffre d’affaires total par pays (quantité fois unit_price, du plus grand au plus petit, ce qui place le Japon en tête avec 717,5), le tableau affiché, et une capture d’écran de cette requête dans la Spark UI. Puis une ou deux phrases, de leurs propres mots, sur ce que Spark a fait. Rien n’est noté automatiquement : la phrase montre si c’était compris. Pour un travail plus poussé, demandez la même réponse en code DataFrame et en SQL.
Une leçon de base sur ce lab
Spark Basics est une petite leçon qui se fait dans ce lab. L’élève y regarde les premières lignes, filtre les commandes du Royaume-Uni, regroupe et compte les commandes par pays, demande en SQL le chiffre d’affaires de chaque pays, puis retrouve ces requêtes dans la Spark UI.
Un compte personnel gratuit la reçoit dans le module Basics, qui se trouve sur « Accueil », chaque établissement peut la copier depuis le dossier Basics de la Bibliothèque, et un nouvel établissement l’a dans un module appelé Lab Basics (Sample). Elle est volontairement petite : elle montre à un enseignant ce qu’est une leçon qui se fait dans un lab, et le lab fait le reste. Copiez-la dans un module à vous pour la modifier.
Le code sur GitHub
Le fichier compose n’a pas de Dockerfile : il lance une seule image publique, celle du projet Apache Spark lui-même, figée sur une version, avec un utilisateur sans privilèges et 512 Mo de mémoire. Apache Spark est sous licence Apache-2.0 et n’est pas distribué par nous. Le fichier écrit aussi le CSV et le petit service de requêtes au démarrage : il n’y a rien à construire. Les limites sont honnêtes : c’est un seul Spark et non un cluster, les données font 24 lignes, donc les durées ne disent rien des charges réelles, une requête qui demande beaucoup plus de mémoire que la copie n’en a échouera, et le lab n’a aucun accès à internet. Rien n’est conservé quand le lab s’arrête.
En faire un travail
Indiquez dans la tâche ce qu’il faut rendre.
- Créer le lab. Dans votre module, ajoutez une tâche et choisissez la carte « Lab de conteneurs », puis « Dans un dépôt GitHub ». Indiquez https://github.com/mitsurutech/lab-spark avec la branche main. Le fichier compose par défaut est compose.yaml. Faites d’abord un fork du dépôt si vous voulez le modifier, par exemple pour utiliser votre propre fichier CSV.
- Publier et l’essayer. « Publier » fige le commit qui vous a été montré : un changement ultérieur dans le dépôt ne modifie donc pas un lab que vous avez déjà proposé. Démarrez d’abord votre propre copie.
- Le distribuer. Attribuez-le comme n’importe quelle tâche, avec une échéance si vous le souhaitez, et indiquez dans la tâche ce qu’il faut faire et ce qu’il faut rendre.
- Noter ce qui est rendu. Ouvrez la copie d’un élève et le travail rendu, notez-le et renvoyez-le avec un motif s’il demande un complément.
Questions fréquentes
- Est-ce un cluster Spark ?
- Non. C’est Spark en mode local, un seul processus qui fait le travail d’un maître et de ses workers, parce que le service d’une copie a 512 Mo et qu’un worker seul en demande davantage. Il enseigne le côté DataFrame et SQL, pas la répartition du travail sur plusieurs machines.
- Pourquoi le terminal utilise-t-il curl et non pyspark ou spark-sql ?
- Le terminal du lab contient curl, psql et quelques autres clients, mais ni Spark ni Java. Le service Spark répond à une requête envoyée en HTTP et affiche le résultat : curl suffit. Sur votre propre machine, vous pouvez utiliser pyspark avec les mêmes idées.
- Les élèves peuvent-ils utiliser leurs propres données ?
- Pas dans une copie, qui n’a aucune entrée pour des fichiers. Faites un fork du dépôt, mettez vos propres lignes dans le CSV de compose.yaml, et proposez le fork comme lab.