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

Créer une transformation MapReduce

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Voyez comment utiliser une transformation de type map avec envoi d'une fonction anonyme sous forme d'expression lambda.
06:01

Transcription

Voyons maintenant des transformations un peu plus utiles ou plus utilisées, celles qui vont nous permettre de passer des fonctions à travers Spark à nos données. Par exemple, très simplement, on va travailler sur « tr » et on va utiliser une transformation qui s'appelle « map ». Ça vous dit quelque chose. Le « map » de MapReduce. Très bien, donc « map » ça veut dire on envoie une fonction aux données. Une fonction de type « map » qui va traiter notre RDD, élément par élément, et retourner une liste d'éléments transformés. Et qu'est-ce qu'on va faire ? Il faut bien qu'on fasse quelque chose ici. Donc on va envoyer du code. Comment est-ce qu'on envoie du code à l'intérieur d'une fonction ? Soit on a prédéfinit une fonction et on envoie l'adresse de cette fonction, ce qu'on appelait dans le bon vieux temps un « call back ». C'est-à-dire on envoie l'adresse de la fonction. Là, n'en parlons pas. Ici on est en traitement distribué, c'est même pas possible. Mais ce qu'on fait habituellement, c'est la création de fonctions anonymes. C'est-à-dire, on définit ici le code de notre fonction. Et comment on fait ça maintenant ? À l'aide d'une construction qui existe dans pratiquement tous les langages, et même dans Java depuis Java 8, qui s'appelle une expression « lambda ». On peut la faire en Python, on peut la faire en Scala. Ici on est en Scala. On va la faire en Scala avec une syntaxe assez classique. Je vous l'écris. Je vais dire « l », par exemple. J'utilise cet opérateur spécial lambda et je vais dire « l.lenght » Qu'est-ce que ça veut dire ? On peut l'expliquer d'une façon simple et puis d'une façon plus technique, si vous voulez. Façon simple : on fait un « map ». Pour chaque élément de la liste, tu le mets dans la variable « l » et ensuite tu appliques « l.lenght » pour chaque élément. Ça veut dire que je vais me retrouver avec autant d'éléments qu'il y avait de lignes à la base, mais le résultat de la transformation, c'est un RDD avec, pour chaque ligne, la longueur de la ligne, le nombre de caractères. Si je veux vous l'expliquer d'une façon plus technique, ça veut dire que cette syntaxe lambda va créer une fonction qui va faire exactement ça, qui va dire je vais créer un paramètre que je vais appeler « l » et puis la fonction va retourner, pour chaque envoi de paramètre, la longueur de la chaîne et donc j'aurais créé une sorte de petite fonction très simple mais autant utiliser une expression lambda qui simplifie la syntaxe de cette fonction. Donc le résultat de mon map, c'est un RDD qui va contenir toutes les longueurs de lignes. Si j'exécute maintenant mon map, je vais avoir un RDD d'entier, c'est logique. Pour l'instant bien entendu, je n'ai pas exécuté mon map, puisque l'exécution ne se produit que lorsque je fais une action. Là, ce n'est pas une action, c'est une transformation, on est d'accord. Je pourrais le faire complètement. Je pourrais dire, je faire « val », « ln » pour longueur est égale à ça. Très bien. Ensuite qu'est-ce que j'en fais ? Je pourrais faire un ln.take de 10. Là je commence à faire une action donc il va se passer quelque chose. Et j'ai un Array qui me montre la taille de chaque ligne. Donc ça commence à ressembler à quelque chose. Maintenant, mon RDD transformé, je vais lui appliquer un reduce, si j'ai fait un map. Vous vous souvenez, map reduce. Pourquoi reduce ? Maintenant, j'ai un RDD qui contient toutes les longueurs, je voudrais avoir la longueur totale, le nombre de caractères finalement de tout mon RDD d'origine. Et donc je vais appliquer un reduce qui ne retourne pas un RDD mais qui va me retourner une valeur. Si je prends la documentation et que je vais regarder sur reduce ici je retourne un type spécifique donc ce n'est pas une transformation, c'est bien une action. Donc si j'applique le reduce, maintenant ça va déclencher le map pour résoudre l'action. Ce qui fait que MapReduce va être envoyé en une seule fois à Spark qui va s'occuper de traiter tout ça. Le reduce, qu'est-ce que je veux ici ? Il faut également que j'indique comment je vais traiter mon reduce. C'est-à-dire il faut aussi que j'indique une fonction qui va me retourner le résultat. Et je vais utiliser une expression lambda. Attention, le problème du reduce, c'est qu'il faut réduire plusieurs éléments, comment on va faire ? On va prendre chaque élément et le traiter avec un autre élément et puis on va trouver un résultat. Alors peut-être plus simplement, si je me retrouve ici avec une liste de nombres de caractères, qu'est-ce que je veux faire ? Je vais prendre celui-ci et dire je fais ça, plus ça on arrive à 70. Je fais ce résultat, 70, plus ça, on arrive à 134. Je fais 134, plus ça, etc. Donc je vais devoir prendre des paires et les additionner à chaque fois, en continuant à additionner avec la valeur suivante. Je vais donc avoir une expression lambda que je vais exprimer ici, qui va prendre deux paramètres. Le premier paramètre, ça va être le résultat en cours de mon addition. Je vais par exemple l'appeler « a ». Deuxième paramètre, ce qui va être le nouvel élément. Et je vais faire une expression lambda pour me dire avec ce que tu reçois, donc c'est comme si j'avais une fonction avec ces deux paramètres qui s'appellent récursivement, avec ces deux résultats, je vais faire a+b. Et finalement mon reduce va me retourner un seul nombre qui va être le cumul de tout ça. Un petit peu de traitement. Et donc il se trouve que j'ai 1 494 752 caractères dans mes fichiers texte. Je viens de faire une opération de map reduce à l'aide de la transformation map et de l'action reduce du RDD de Spark.

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 !