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

    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



    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
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  3. #3
    Rédacteur

    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
    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é
    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.

###raw>template_hook.ano_emploi###