Le 14 septembre 2017, nous avons publié une version actualisée de notre Politique de confidentialité. En utilisant video2brain.com vous vous engagez à respecter ces documents mis à jour. Veuillez donc prendre quelques minutes pour les consulter.

L'essentiel d'Apache Spark

Joindre des DataFrames

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
À l'aide de la jointure, appliquez une transformation sur deux DataFrames pour en générer un troisième.
09:14

Transcription

Maintenant que nous avons notre premier DataFrame, ici les communes, on va importer le second, les lieux-dits, je vais l'appeler ld. Je vais changer ça simplement donc ld lieux-dits. J'ai deux DataFrames et je me retrouve finalement avec deux tables comme si j'étais dans une base de données relationnelle mais est-ce que je peux faire des relations ? Oui, je peux faire des relations parce que je peux commencer à travailler avec mes DataFrames comme je le ferais en SQL, par exemple, en faisant des jointures. Voyons déjà ce que l'on a. Dans co, qu'est-ce que j'ai comme colonnes ? J'ai le code, le nom, le type de commune et la population. Je peux faire un show rapidement, je vais en montrer dix et j'ai ici mon code qui correspond au code de commune, le nom de la commune, le type de commune, etc... Qu'est-ce que j'ai dans mes lieux-dits ? J'ai ici le code de la commune que j'ai nommée commune, j'aurais mieux fait de nommer code commune des deux côtés mais tant pis... Donc, avec cela, est-ce que je peux faire une jointure ? Oui, je peux faire une jointure de deux façons. Je peux utiliser soit du langage SQL, on va le voir après, soit je peux utiliser des méthodes ce qu'on appelle un langage spécifique du domaine, un dsl (domain-specific langague) un peu comme dans Link, si vous connaissez link en dot net, ici je vais avoir des méthodes spécifiques pour faire des jointures pour utiliser soit mon langage à base de méthode objet, soit (on le verra plus tard) un langage plutôt déclaratif sous forme de requête SQL avec des selects. Je pars de ma commune, j'utilise la méthode join et, à l'intérieur, vous vous souvenez, on ne parle plus du tout de Lambda ici, on va parler de paramètres et d'expressions. Je vais dire d'abord, je vais joindre avec quoi : mes lieux-dits, on est d'accord, j'ai pris la commune ici, j'ai pris co donc je vais faire une jointure avec ld et je vais dire quelle est la clause de jointure. Je vais dire, il me faut le code qui vient de co, la syntaxe pour référencer une colonne dans un DataFrame est la suivante : je prends la colonne code dans co et je vais faire une égalité, je peux faire une double égalité ou une triple égalité, c'est une extension de Scala pour dire qu'on va faire comparaison et puis on aura des messages d'erreur plus clairs, si jamais, donc je prends ld commune et voilà ma clause de jointure. Qu'est-ce que ça donne, on va faire un show directement derrière. Ici, bien entendu, c'est une transformation donc je vais faire une action pour afficher le résultat. Et voilà, j'ai donc toutes mes informations de communes d'abord, jusqu'ici, on est d'accord, et ensuite, cela vient de la table, du DataFrame plutôt, des lieux-dits. Plutôt pas mal, non ? Bien sûr, je peux continuer comme cela. C'est-à-dire que je peux utiliser ce langage spécifique pour faire une suite d'opérations comme je ferais un select avec un join et ensuite un where et un groupBy, on va le faire. Avant de faire le join, je vais par exemple, faire un filter pour dire : je ne veux que les communes dont la population est supérieure à 1000. Donc dans mon filter ici, j'ai une expression, je me répète encore une fois, pas un Lambda, donc je peux dire ici une expression entre guillemets : la population, parce que je vois que c'est ici une colonne qui vient bien de co, de la commune, la population doit être plus grande que 1000. On regarde ce que cela donne. Effectivement, on a changé, ici, on a bien Ambérieux avec une population supérieure, on continue, on enlève notre show et puis on voudrait faire, maintenant, avec ce résultat, un groupBy. On va regrouper par ceci, le code donc à l'intérieur. C'est quoi ce résultat de groupBy ? On va regarder dans l'aide. Si je regarde sur le Dataset, parce que vous vous souvenez que le DataFrame descend du Dataset, j'ai ici groupBy, qui me retourne un RelationalGroupedDataset donc c'est un objet spécifique. Voyez, il y a des exemples d'appels, ici, je fais un groupBy ensuite j'utilise la méthode agg, c'est quoi la méthode agg ? Elle vient du RelationalGroupedDataset, le Dataset de résultat de cette transformation, c'est un type spécifique. Je vais regarder sur l'aide de ce RelationalGroupedDataset et je vois que je peux faire différentes choses un count, un max, une moyenne ou bien un agg avec une série d'agrégations sur plusieurs colonnes. Si j'utilise agg, je peux faire différentes agrégations, de différentes colonnes : un max d'une colonne, le count d'une autre colonne ou bien je peux directement utiliser un count, un max, un min et, vous voyez, je peux même pivoter les colonnes donc on peut vraiment tout faire. Utilisons ici agg, par exemple et puis on pourrait prendre plusieurs colonnes mais je vais simplement faire un count des identifiants, par exemple. Il faut bien que je ferme trois parenthèses et puis je pourrais ajouter : virgule et prendre le max du caractère ici ou le max de la voie, juste pour voir ce que cela donne. Donc ld voie et je ne suis plus du tout sûr d'avoir fermé le bon nombre de parenthèses, un, deux, trois, deux, un, deux, ça m'a l'air pas mal, on va voir ce que cela donne. Non, je dois avoir un problème de parenthèses, on revient en arrière, on va déjà voir si ceci donne quelque chose. Non, parce que je ne peux pas faire un show sur un RelationalGroupedDataset on me dit que ce n'est pas possible, ça n'existe pas donc je vais faire simplement un count. Je vois que je retourne d'ailleurs un DataFrame donc je pourrais faire un show 10 de ce count. Là, par contre, un peu de calcul. Effectivement, voià le count sur chaque code, c'est à peu près ce que j'avais avec le agg ici donc je vais me contenter de cela, je devais avoir un problème de parenthèses. Ce que je veux vous montrer par contre, c'est qu'ici on a quand même fait d'abord une sorte de closeware : un filtre puis ensuite une jointure, ensuite un groupBy, ensuite une fonction d'agrégation sur le groupBy, c'est du boulot ! Est-ce qu'on peut voir le boulot qui a été fait ? Bien sûr ! Vous vous souvenez de l'interface graphique qui nous montre l'exécution ? Je vais la rafraîchir et je vois qu'il y a eu un certain nombre de jobs ici. Le dernier a duré six secondes, intéressant, ça doit être ça. On va aller sur SQL, il a duré six ou sept secondes, je vais voir et vous voyez que j'ai le détail de la requête. Comment le moteur d'exécution de Spark a exécuté cette demande ? Il y a eu un scan de deux fichiers Avro donc là on a peut-être un problème car j'utilise de l'Avro mais il vaudrait mieux utiliser du Parquet car j'ai fait des lectures sur des fichiers Avro, ce n'est peut-être pas très optimisé. On basculera en Parquet, je vous montrerai comment sauvegarder cela en Parquet et comment utiliser plutôt des fichiers Parquet pour améliorer les performances, parce que lorsque vous allez exécuter ces requêtes, à moins que vous ne les chargiez après en mémoire, déjà au départ, vous allez lire les fichiers. Donc il vaut mieux avoir un format de fichier adapté et, je vous le disais, Parquet vient de Dremel et c'est un format de fichier qui est beaucoup plus adapté à ce type d'opération surtout sur des fichiers volumineux. Donc, on a fait un scan, on a fait des filtres, ici, on a fait un échange pour faire un join, vous voyez, on a fait un Hjoin, un hashage et puis on a fait une agrégation. Voyez qu'il y a eu des échanges, des shuffles, on a échangé des partitions donc vous voyez aussi toutes les informations de volume et de temps d'exécution qui vont vous permettre de vous rendre compte de l'effet de ce que vous faites, de voir où il y a eu des échanges de données entre les différents noeuds et donc d'améliorer votre façon de travailler, de façon à améliorer les performances.

L'essentiel d'Apache Spark

Analysez des données volumineuses avec Apache Spark. Chargez vos données pour les analyser, profitez des opérations de transformation et des actions pour agréger vos données, etc.

3h11 (38 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Spécial abonnés
Date de parution :16 mars 2017

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !