Giter Site home page Giter Site logo

spark-wiki-extracts's Introduction

Test Avril 2018

Configuration requise

Objectifs

Nous montrer un aperçu de votre façon de programmer, que vous êtes - ou pouvez être - à l'aise aussi bien avec la jvm, spark que aws ou github.

A faire décontracté, en s'appuyant sur les documentations des librairies utilisées dans le projet si vous n'êtes pas familier avec celles-ci. Mais sans pour autant piocher sur stackoverflow.

Github

  1. Forker le projet

  2. Faire une pull request dès que vous avez terminé

Spark / scala

Créer un référentiel au format Apache Parquet contenant le classement général des 5 grands championnats de football européen sur les 40 dernières années en grapillant les informations sur wikipedia (ex: ici).

<table class="wikitable gauche" style="text-align:center; line-height:16px;">
  <caption>Classement</caption>
  <tr bgcolor="#F2F2F2">
    <th scope="col" style="">Rang</th>
    <th scope="col" style="" width="200">Équipe</th>
    <th scope="col" style="width:20px"><span style="cursor:help;" title="Points">Pts</span></th>
    <th scope="col" style="width:20px"><span style="cursor:help;" title="Matchs joués">J</span></th>
    <th scope="col" style="width:20px;border-right-style:hidden"><span style="cursor:help;" title="Matchs gagnés">G</span></th>
    <th scope="col" style="width:20px;border-right-style:hidden"><span style="cursor:help;" title="Matchs nuls">N</span></th>
    <th scope="col" style="width:20px"><span style="cursor:help;" title="Matchs perdus">P</span></th>
    <th scope="col" style="width:20px;border-right-style:hidden"><span style="cursor:help;" title="Buts pour">Bp</span></th>
    <th scope="col" style="width:20px;border-right-style:hidden"><span style="cursor:help;" title="Buts contre">Bc</span></th>
    <th scope="col" style="width:25px"><span style="cursor:help;" title="Différence de buts">Diff</span></th>
  </tr>
  <tr bgcolor="white">
    <td><b><span class="nowrap">1</span></b></td>
    <td align="left"><span class="nowrap"><a href="/wiki/Lille_OSC" class="mw-redirect" title="Lille OSC">Lille</a></span></td>
    <td><b>44</b></td>
    <td>19</td>
    <td style="border-right-style:hidden">13</td>
    <td style="border-right-style:hidden">5</td>
    <td>1</td>
    <td style="border-right-style:hidden">40</td>
    <td style="border-right-style:hidden">17</td>
    <td>+23</td>
  </tr>
  ...

Il faudra extraire les données contenues dans les differents tableaux html et créer un export partquet ayant cette forme.

+-------+------+--------+-------------+------+------+---+-----+----+--------+------------+---------------+
| league|season|position|         team|points|played|won|drawn|lost|goalsFor|goalsAgainst|goalsDifference|
+-------+------+--------+-------------+------+------+---+-----+----+--------+------------+---------------+
|Ligue 1|  2003|      10|         Nice|    55|    38| 13|   16|   9|      39|          31|              8|
|Ligue 1|  2008|      11|         Caen|    51|    38| 13|   12|  13|      48|          53|             -5|
|Ligue 1|  1979|       1|RC Strasbourg|    56|    38| 22|   12|   4|      68|          28|             40|
Comment faire

Créer le projet dans Intellij Idea en important la configuration maven à la racine.

Toutes les librairies sont fournies pour la réalisation du test.

Le test unitaire com.test.spark.wiki.extracts.RunTasks permet de lancer les 2 tâches spark suivantes:

  • com.test.spark.wiki.extracts.Q1_WikiDocumentsToParquetTask

    • La classe contient des petites questions générales
    • Cette classe genère les urls à crawler depuis le fichier src/main/resources/leagues.yaml
    • La classe ne compile pas
    • Il manque le parsing des pages wikipedia avec la librairie Jsoup
    • Il manque "l'activation" de spark
    • Générer des données en respectant le schéma de la classe LeagueStanding
  • com.test.spark.wiki.extracts.Q2_ShowLeagueStatsTask

    • En utilisant les données générées par Q1_WikiDocumentsToParquetTask répondre aux questions posées dans la classe

La commande mvn test doit permettre de voir les résultats attendus

Aws

  • Ecrire un fichier cloudformation yaml dans cfn/s3.yml permettant de monter

    • Un bucket S3 "A"
    • Un bucket S3 "B" contenant les logs d'accès du bucket S3 "A"
  • S'il fallait protéger les données sur un bucket S3 comment procéderiez-vous ?

Bonne session :)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.