Hadoop plusieurs entrées
Je suis en utilisant hadoop map réduire et je veux calculer les deux fichiers. Ma première Map/reduce itération est de me donner un fichier avec une paire numéro d'ID comme ceci:
A 30
D 20
Mon objectif est d'utiliser cet ID dans le fichier à associer avec un autre fichier et avoir une autre sortie avec un trio: ID, le Numéro, le Nom, comme ceci:
A ABC 30
D EFGH 20
Mais je ne suis pas sûr que ce soit en utilisant la Carte de Réduire les est la meilleure façon de le faire. Serait-il préférable par exemple d'utiliser un Lecteur de Fichiers pour Lire le deuxième fichier d'entrée et obtenir le Nom par ID? Ou puis-je le faire avec la Carte de Réduire?
Si oui, j'essaie de trouver comment. J'ai essayé un MultipleInput solution:
MultipleInputs.addInputPath(job2, new Path(args[1]+"-tmp"),
TextInputFormat.class, FlightsByCarrierMapper2.class);
MultipleInputs.addInputPath(job2, new Path("inputplanes"),
TextInputFormat.class, FlightsModeMapper.class);
Mais je ne peux pas penser à une solution pour combiner les deux et obtenir le résultat que je veux. La façon dont j'ai droit maintenant, c'est juste de me donner la liste comme dans cet exemple:
A ABC
A 30
B ABCD
C ABCDEF
D EFGH
D 20
Après mon Dernier Réduire j'obtiens ceci:
N125DL 767-332
N125DL 7 ,
N126AT 737-76N
N126AT 19 ,
N126DL 767-332
N126DL 1 ,
N127DL 767-332
N127DL 7 ,
N128DL 767-332
N128DL 3
Ce que je veux c': N127DL 7 767-332. Et aussi, je ne veux pas que ceux qui ne se combinent pas.
Et c'est ma réduire classe:
public class FlightsByCarrierReducer2 s'étend Réducteur {
String merge = "";
protected void reduce(Text token, Iterable<Text> values, Context context)
throws IOException, InterruptedException {
int i = 0;
for(Text value:values)
{
if(i == 0){
merge = value.toString()+",";
}
else{
merge += value.toString();
}
i++;
}
context.write(token, new Text(merge));
}
}
Mise à jour:
http://stat-computing.org/dataexpo/2009/the-data.html c'est l'exemple que j'utilise.
Je suis en train d'essayer avec: TailNum et Annulée, ce qui est (1 ou 0) obtenir le nom du modèle qui correspond à la TailNum. Mon fichier avec le modèle a un TailNumb, Modèle et d'autres choses. Ma courant de sortie est:
N193JB ERJ 190-100 IGW
N194DN 767-332
N19503 EMB-135ER
N19554 EMB-145LR
N195DN 767-332
N195DN 2
Première vient de la clé, le deuxième le modèle, les clés qui a des vols annulés, apperas ci-dessous le modèle
Et je voudrais un trio Clé,le Numéro de Modèle de Annulée, Parce que je veux le nombre d'Annulations par modèle
la première autour de 600k entrées, la seconde autour de 2k
dire second fichier a la longueur de la ligne 100 octets en moyenne, alors la taille totale sera d'environ 200k. Je suppose que u peut le mettre dans
DistributedCache
pour effectuer une carte côté de jointure et d'économiser du carburant 😉U peut pastebin 2 entrées que vous essayez de les regrouper? Qu'est-ce que N125DL...etc
veuillez lire la mise à jour
OriginalL'auteur dex90 | 2014-12-08
Vous devez vous connecter pour publier un commentaire.
Vous pouvez vous joindre à eux à l'aide de l'ID comme clé pour les deux mappeur.
Vous pouvez écrire votre carte tâche en tant que quelque chose comme cela
Je pense que vous pouvez resuse la même Carte tâche.
Et puis écrire un commomn Réducteur de travail où Framework Hadoop groupes de données sur la clé.
Ainsi, vous serez en mesure d'obtenir l'ID comme clé.
Et Vous pouvez mettre en cache l'un de la valeur et puis concat.
Enfin, vous pouvez écrire votre Chauffeur classe
Vous pouvez trouver l'exemple ICI
Espère que cette aide.
Mise à JOUR
Input1
Input2
Sortie
Mapper.java
Reducer.java
De la classe du pilote
OriginalL'auteur Unmesha SreeVeni
Votre réducteur a une méthode map, mais il devrait avoir un méthode qui prend un objet iterable collection de valeurs qui vous puis la fusion. Parce que vous n'avez pas de réduire() la méthode, vous obtenez le comportement par défaut qui est juste passer à travers toutes les paires clé/valeur.
Ajouter le @Override drapeau de la méthode pour forcer le compilateur à assurez-vous que vous avez remplacé correctement.
OriginalL'auteur Chris Gerken