Wiele ścieżek wyjściowych (Java - Hadoop - MapReduce)
Wykonuję dwa zadania MapReduce i chcę, aby drugie zadanie mogło zapisać mój wynik w dwóch różnych plikach, w dwóch różnych katalogach. Chciałbym coś podobnego do FileInputFormat.addInputPath (.., wiele ścieżek wejściowych) w pewnym sensie, ale dla wyjścia.
Jestem zupełnie nowy w MapReduce i mam specyfikę do napisania mojego kodu w Hadoop 0.21.0, którego używamcontext.write(..)
w moim kroku Zmniejsz, ale nie widzę, jak kontrolować wiele ścieżek wyjściowych ...
Dziękuję za Twój czas !
Mój redukujący kod z mojej pierwszej pracy, aby pokazać ci, że wiem tylko, jak wypisać (trafia do pliku /../part*. Ale teraz chciałbym móc określić dwa precyzyjne pliki dla różnych wyników, w zależności od klucz) :
public static class NormalizeReducer extends Reducer<LongWritable, NetflixRating, LongWritable, NetflixUser> {
public void reduce(LongWritable key, Iterable<NetflixRating> values, Context context) throws IOException, InterruptedException {
NetflixUser user = new NetflixUser(key.get());
for(NetflixRating r : values) {
user.addRating(new NetflixRating(r));
}
user.normalizeRatings();
user.reduceRatings();
context.write(key, user);
}
}
EDYTOWAĆ: więc zrobiłem metodę w ostatnim komentarzu, jak wspomniałeś, Amar. Nie wiem, czy to działa, mam inny problem z moim HDFS, ale zanim zapomnę, umieśćmy tutaj moje odkrycia dla dobra cywilizacji:
Wielokrotne wyjścia NIE działają w miejsce FormatOutputFormat. Definiujesz jedną ścieżkę wyjściową z FormatOutputFormat, a następnie możesz dodać wiele więcej z wieloma wielokrotnymi wyjściami.addNamedOutput method: String namedOutput to tylko słowo, które opisuje.Ścieżkę definiujesz faktycznie w metodzie write, argumencie String baseOutputPath.