Я новичок в hadoop, я пытаюсь создать программу, которая возьмет входной файл, описывающий график с ребрами (например: (A,B), (A,C), (B,D), (A,D)
). Я хочу подсчитать градусы каждой вершины и отобразить ее так :MapReduce вопрос подсчета
(A,B) d(A)=3
(A,C) d(A)=3
(A,D) d(A)=3
(A,B) d(B)=2
(B,D) d(B)=2
(A,C) d(C)=1
(A,D) d(D)=2
(B,D) d(D)=2
на данный момент я был в состоянии сделать свою работу хорошо карты (расщепление 2 вершины и испускают <Key, Value>
как <Vertex, Edge>
(например: <A, (A,B)>
), но сократить есть проблема, что я не могу понять, когда. Я делаю context.write(key, result);
вне цикла for, результат отображается всегда 1. Я пытался отлаживать, но переменная sum
имела правильное значение.
Сокращать
public void reduce(Text key, Iterable<Text> values,
Context context
) throws IOException, InterruptedException {
int sum = 0;
for (Text val : values) {
sum+=1;
result.set("d("+ key +")=" + sum);
// WRITE INSIDE THE LOOP
context.write(key, result);
}
}
Результат:
A d(A)=1
A d(A)=2
A d(A)=3
B d(B)=1
B d(B)=2
C d(C)=1
D d(D)=1
D d(D)=2
Снижение v2:
public void reduce(Text key, Iterable<Text> values,
Context context
) throws IOException, InterruptedException {
int sum = 0;
for (Text val : values) {
sum+=1;
result.set("d("+ key +")=" + sum);
}
// WRITE HERE NOW
context.write(key, result);
}
Результат v2:
A d(A)=1
B d(B)=1
C d(C)=1
D d(D)=1
Можете ли вы сказать мне, что неправильно с кодом или/и почему он ведет себя таким образом?
где (и как) вы объявить 'result'? – vefthym
Ваш код верен. Убедитесь, что вы используете последнюю версию runnable jar. Возможно, вы используете предыдущую версию своего кода. Скомпилируйте и снова сделайте банку. – vefthym
@vefthym public static class IntSumReducer extends Reducer <Текст, текст, текст, текст> { \t private Текст result = new Текст(); Это просто атрибут Text для Reducer , и я использую eclipse, поэтому он генерирует новую банку каждый раз, когда я выполняю свой код. + Я попробовал в консольной версии (я думал, что в eclipse есть ошибка) и использовал правильные команды для создания флага и использовал его, но тот же результат ... – Didi