2017-10-15 26 views
-1

Si le fichier d'entrée est: 1,1,2,2,3,4,4,4,5,5,5,5,6,6,6, la sortie de MapReduce doit être (à savoir la taille de l'ensemble des entiers uniques {1,2,3,4,5,6}).MapReduce: Avec un fichier de nombres, sortie la quantité de nombres distincts/uniques

J'ai besoin d'aide pour mettre en œuvre ce qui précède. Je sais que nous pouvons filtrer les doublons en émettant chaque nombre par rapport à une valeur nulle en map(), puis en sortie la clé contre une valeur nulle en reduce() dans un fichier/console résultant.

Mais si je dois directement obtenir le nombre de nombres distincts, comment pourrais-je procéder? Mon implémentation actuelle consiste à construire un Set, à le passer en tant que sortie du Mapper, et dans le Reducer, à combiner tous les Sets qui lui sont passés, et à retourner le nombre de Set qui en résulte. Notez qu'il s'agit plus d'une question de conception que d'une question de mise en œuvre spécifique à une bibliothèque (par exemple, Hadoop).

+0

sonne bien. Maintenant, où est le code? Stackoverflow n'est pas un service d'écriture de code –

+0

Ajout d'un peu plus de détails sur ce que je sais et ce que j'ai pu comprendre jusqu'ici. – Daksh

+0

Pourquoi avez-vous besoin de réduire la carte pour cela? Spécifiquement * réduire *? C'est une opération de carte seulement pour filtrer les doublons et écrire le nombre d'entre eux –

Répondre

0

Utilisez un mappeur pour créer un hachage. Rendre la sortie de IntWritable et NullWritable.

Ajouter toutes les valeurs d'entrée à l'ensemble.

Ecrivez la taille du Hashset.

Définissez le nombre de tâches de réduction sur 0, car il n'est pas nécessaire.


Si vous devez utiliser un réducteur, affichez la sortie (nulle, valeur) du mappeur.

Faites comme ci-dessus.


alternatives (simples) méthodes existent si vous pouvez utiliser Hive, Pig, ou Spark