2017-09-29 1 views
0

Essayez de formuler un travail Hadoop différent de l'exemple de nombre de mots normal. Mes données d'entrée est de la forme:Formulation de travail Hadoop, en passant ArrayList <String> à Mapper()

makePush,1964 
makePush,459 
makePush,357 
opAdd,2151 
opAdd,257 
opStop,135 

J'aimerais passer à ces Mapper(), et par la suite les fonctions Reducer(), mais je ne parviens pas à la spécification, à savoir

Mapper<KEYIN,VALUEIN,KEYOUT,VALUEOUT> 

Donc, par exemple, opAdd serait un KEYIN, et 257 serait un VALUEIN. Par la suite la somme de tous les opAdd serait un KEYOUT et la somme des nombres associés serait VALUEOUT, cela a du sens n'est-ce pas?

Cependant, comment implémenter cela par programme? Il me semble que ce n'est pas si différent de l'exemple de Word Count en théorie.

Répondre

2

par exemple, OPADD serait un KEYIN et 257 serait un VALUEIN

Non, la clé serait un LongWritable, qui est le marqueur de décalage dans le fichier pour désigner l'emplacement où la carte actuelle tâche lit le fichier.

La valeur serait Texte, ce qui serait la ligne entière de opAdd,257 qui vous toString().split(",") de séparer les données

+0

Aha- Je pense que je vois ce que vous dire- depuis différents nœuds lire le fichier à différents endroits est-ce? –

+1

Correct. Le LongWritable est sérialisé entre toutes les tâches de la carte afin qu'ils sachent où ils commencent à lire les lignes de fichier. –

+0

sais comment je peux 'System.out.println (" * quelque chose à propos de l'état du processus intermédiaire pour le débogage * ")' dans Hadoop - dois-je utiliser ce 'log4j'? –