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

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Tutoriel pour implémenter un algorithme de MapReduce en JavaScript classique et ES6
Par Marc Autran

Le , par autran

53PARTAGES

9  0 
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 !

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de danielhagnoul
Rédacteur https://www.developpez.com
Le 15/09/2016 à 21:33


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
3  0 
Avatar de autran
Rédacteur https://www.developpez.com
Le 16/09/2016 à 0:35
Bien vu Daniel !!!

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

Marc
1  0 
Avatar de bvdig
Candidat au Club https://www.developpez.com
Le 22/05/2019 à 9:30
Bonjour à tous,

Voici mon implémentation avec un peu de retard

Code : Sélectionner tout
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
1  0 
Avatar de Loralina
Membre éclairé https://www.developpez.com
Le 22/05/2019 à 16:49
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
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
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.
1  0