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.
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
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/
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)
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.
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 ? »