بدون توضیح

theenglishway (time) df258a3aa9 Create "local" dir on startup 2 سال پیش
expected 2af2208047 Add an "expected" directory 2 سال پیش
project 704202d41a Initial commit 2 سال پیش
src df258a3aa9 Create "local" dir on startup 2 سال پیش
.gitignore 2af2208047 Add an "expected" directory 2 سال پیش
.scalafmt.conf 704202d41a Initial commit 2 سال پیش
README.md c7d380e6b5 Add a README 2 سال پیش
build.sbt ba9c041b4f Add an worksheet with spark dataframes 2 سال پیش

README.md

Examen Spark

Installation

Le code peut être installé et lancé avec un simple sbt run.

Comportement attendu

Le comportement attendu au premier lancement est le suivant :

  • Consultation de l'API du site proposé, sur les endpoints /teams, puis /games, puis /stats
  • Enregistrement des infos récupérées dans des fichiers .json (dans un répertoire ./local)
  • Analyse des données lues depuis les fichiers .json avec Spark
  • Ecriture du résultat dans plusieurs fichiers .csv dans des sous-répertoires de output/ :
    • teams_games_df: "un DataFrame avec le nombre de points marqués par l'équipe, l'id du match, le nom et l'id de l'équipe"
    • stats_by_game_and_team: "un DataFrame avec l'id du match, l'id de l'équipe, le nombre de points marqués (pts), le nombre de rebonds (reb), le nombre de passe décisive (ast) et le nombre de blocks (blk)."
    • final_df: la fusion des 2 précédents

Lors des lancements suivants, si les fichiers .json sont déjà présents, on ne va pas consulter l'API pour rien ; il faut plus d'une centaine de requêtes (!) pour récupérer toutes les données exigées et ça ne me semble pas correct de flooder de requêtes un service gratuit.

Remarques

J'ai essayé d'exploiter au maximum le système de types de Scala pour valider que les données récupérées par l'API sont au format attendu (voir le fichier src/main/scala/Games.scala).

Je n'ai pas réalisé la partie SQL car j'ai déjà passé vraiment BEAUCOUP de temps (de l'ordre de 3-4 jours de travail à temps complet) sur cet examen qui me semble très difficile. Je dois dire aussi que l'énoncé n'est pas forcément très clair..

Pour info, pour les autres élèves, l'API fonctionne très bien avec le paramètre teams_ids[], mais il faut le repéter autant de fois qu'il y a de valeurs dans le tableau : par exemple https://www.balldontlie.io/api/v1/games?seasons[]=2021&team_ids[]=24&team_ids[]=22 (et non le plus naturel : https://www.balldontlie.io/api/v1/games?seasons[]=2021&team_ids[]=24,22). Idem pour game_ids[] sur l'endpoint /stats. Il faudrait donc corriger cette phrase du sujet qui induit vraiment en erreur : "l'API ne fonctionne pas correctement, vous ne pouvez pas utiliser le paramètre team_ids[], mais seasons[] fonctionne"