IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Implémentation d'un algorithme de MapReduce en JavaScript classique et ES6 [Tutoriel]


Sujet :

JavaScript

  1. #1
    Rédacteur

    Avatar de autran
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2015
    Messages
    1 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 1 241
    Points : 7 653
    Points
    7 653
    Billets dans le blog
    55
    Par défaut Implémentation d'un algorithme de MapReduce en JavaScript classique et ES6
    Bonjour à tous,

    Je vous propose un tutoriel pour apprendre à implémenter un algorithme de MapReduce avec la technologie JavaScript. Il s'agit d'un cas d'école qui offre un aperçu de ce que l'on peut faire avec ce langage dans le domaine du Big Data.

    Implémentation d'un algorithme de MapReduce en JavaScript classique et ES6

    Merci de laisser vos commentaires !


    Retrouvez tous nos cours et tutoriels pour apprendre le JavaScript !
    Développeur Java
    Site Web

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut


    Hier soir, j'ai publié un billet de blog utilisant ta version ES2015 de cet algorithme : kNombreMots() retourne le nombre de mots et, dans l'ordre alphabétique, le nombre de chaque mot

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Rédacteur

    Avatar de autran
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2015
    Messages
    1 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 1 241
    Points : 7 653
    Points
    7 653
    Billets dans le blog
    55
    Par défaut
    Bien vu Daniel !!!

    Je vais creuser ton blog, ça m'a l'air passionnant.
    A bientôt sur l'un de tes fils.

    Marc
    Développeur Java
    Site Web

  4. #4
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2019
    Messages : 1
    Points : 2
    Points
    2
    Par défaut Implémentation MapReduce
    Bonjour à tous,

    Voici mon implémentation avec un peu de retard

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     countWords = str => {
      const arr = str.split(' ')
     
      const obj = arr.sort().reduce((acc, word, index) => {
        if (word !== 'se') acc[word] = ++acc[word] || 1
        return acc
      }, {})
     
      return Object.entries(obj)
    }
     
    console.log(countWords('voiture la le elle de elle la se la maison voiture'))
    //[['de', 1], ['elle', 2], ['la', 3], ['le', 1], ['maison', 1], ['voiture', 2]]
    Merci pour vos commentaires.

    Bonne journée

    Benjamin

  5. #5
    Membre éclairé
    Femme Profil pro
    Autre
    Inscrit en
    Janvier 2017
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2017
    Messages : 335
    Points : 715
    Points
    715
    Par défaut
    Bonjour,
    Citation Envoyé par bvdig Voir le message
    Merci pour vos commentaires.
    C'est intéressant.
    J'ai réfléchi à quelques optimisations sur la vitesse d'exécution :
    1) ++acc[word] est à remplacer par acc[word]+1.
    2) J'observe un traitement plus rapide en remplaçant Object.entries par une construction plus explicite du tableau (mais on perd en concision du code, à voir ce que l'on privilégie).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    const countWords2 = str => {
    	const obj = str.split(' ').sort().reduce((acc, word) => {
    		if (word !== 'se') {
    			acc[word] = acc[word]+1 || 1;
    		}
    		return acc;
    	}, {});
    	const arr = [];
    	for(const i in obj) {
    		arr[arr.length] = [i, obj[i]];
    	}
    	return arr;
    };
    3) Pour alléger le tri, je pense qu'il serait préférable de le faire à la fin (la différence sera appréciable à partir d'un certain nombre de répétitions des mots).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    const countWords3 = str => {
    	const arr = [];
    	const obj = str.split(' ').reduce((acc, word) => {
    		if (word !== 'se') {
    			if (acc[word] !== undefined) {
    				acc[word]++;
    			}
    			else {
    				acc[word]=1;
    				arr[arr.length]=word;
    			}
    		}
    		return acc;
    	}, {});
    	arr.sort();
    	for(let i=arr.length-1 ; i>=0 ; i--) {
    		arr[i] = [arr[i], obj[arr[i]]];
    	}
    	return arr;
    };
    Enfin, je pense qu'on pourrait gagner encore un peu en remplaçant reduce par une simple boucle.

Discussions similaires

  1. Réponses: 22
    Dernier message: 16/09/2016, 19h01
  2. Implémentation de l'algorithme FCM en C
    Par hoolaka dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 11/02/2008, 23h57
  3. Tutoriel : Implémentation du pattern MVC
    Par Ricky81 dans le forum MVC
    Réponses: 0
    Dernier message: 11/02/2008, 10h51
  4. Réponses: 1
    Dernier message: 07/03/2007, 10h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo