Pipeline médallion · Spark sur master réel · MinIO

Les taxis verts de New York,
de la donnée brute aux insights

Un pipeline complet en une seule commande : ingestion du brut tel quel dans un stockage objet, nettoyage et typage distribués avec Spark connecté à un vrai master (spark://spark-master:7077), agrégats métier, puis ce dashboard statique. Chaque graphique répond à une question de l'énoncé.

Bronze : CSV bruts tels quels (MinIO) Silver : Parquet typé & jointuré (MinIO) Gold : agrégats par insight (MinIO) make run DATA_PATH=…

01Le pipeline en trois couches

Le brut est persisté avant toute transformation, puis raffiné couche par couche. Chaque étape tourne sur le cluster Spark (master + worker), jamais en local.

Bronze

Persistance du brut

L'archive et chaque fichier extrait sont copiés octet pour octet vers s3a://bronze/, sans aucune transformation.

  • ingestion via MinIO (stockage objet S3)
  • manifeste JSON des fichiers ingérés
  • mode SAMPLE possible pour itérer vite
➜
Silver

Nettoyage & typage

Lecture des CSV bruts, typage strict (timestamps, montants), résolution du schéma drift, jointures dimensions.

  • congestion_surcharge absente en 2017-2018 → null géré
  • jointure taxi_zones (265 zones) pickup & dropoff
  • Parquet partitionné par année sur s3a://silver/
➜
Gold

Agrégats métier

Un mart JSON par question de l'énoncé : évolution, charge jour×heure, part intra-borough, flux entre boroughs.

  • s3a://gold/ puis export vers ce site
  • agrégats légers → dashboard 100% statique
  • vérifiable dans la console MinIO (:9001)
# tout le pipeline, une seule commande :
make run DATA_PATH="datawarehouses/NYC Taxi Trips" # ajouter SAMPLE=1 pour ne traiter que 2020

02Vue d'ensemble

Dataset « NYC_Taxi_Trips.zip » ingéré depuis le dossier brut, traité sur spark://spark-master:7077. Généré le 2026-08-24.

courses analysées
période couverte
années de données
boroughs actifs
de CSV brut ingéré

03Évolution du nombre de courses

« Comment le nombre de courses en taxi vert a-t-il évolué dans le temps ? »

04Jours et heures les plus chargés

« Quels jours de la semaine et quelles heures de la journée sont les plus chargés ? »

05Courses restant dans leur borough

« Pour chaque arrondissement (borough), combien de courses restent à l'intérieur de cet arrondissement ? »

06Trajets entre boroughs

« Combien de courses relient un borough à un autre ? Existe-t-il des trajets principaux ? »