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

  1. #1
    Rédacteur

    Avatar de autran
    Homme Profil pro
    Développeur Java
    Inscrit en
    février 2015
    Messages
    1 215
    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 215
    Points : 7 072
    Points
    7 072
    Billets dans le blog
    42

    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 158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Belgique

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

    Informations forums :
    Inscription : février 2009
    Messages : 6 158
    Points : 22 267
    Points
    22 267
    Billets dans le blog
    63

    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



    Nota bene : si vous devez être compatible avec les navigateurs obsolètes (IE8 et plus), vous devez convertir les codes ES2015 en ES5 avec Babel.

    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 215
    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 215
    Points : 7 072
    Points
    7 072
    Billets dans le blog
    42

    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 confirmé
    Femme Profil pro
    Autre
    Inscrit en
    janvier 2017
    Messages
    252
    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 : 252
    Points : 500
    Points
    500

    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, 18h01
  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, 22h57
  3. Tutoriel : Implémentation du pattern MVC
    Par Ricky81 dans le forum MVC
    Réponses: 0
    Dernier message: 11/02/2008, 09h51
  4. Réponses: 1
    Dernier message: 07/03/2007, 09h28

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