Как метод mapper run() обрабатывает последнюю запись?
public void run(Context context) throws IOException, InterruptedException
{
setup(context);
while (context.nextKeyValue()) {
map(context.getCurrentKey(), context.getCurrentValue(), context);
}
cleanup(context);
}
При использовании приведенного выше фрагмента при вызове метода запуска картографа каждый раз он получает следующий ключ, пару значений с помощью функции nextkeyvalue() из рекордера и обрабатывает текущий ключ, пару значений. Таким образом, в этом случае, если мы обрабатываем последнюю запись определенного входного разделения, функция nextkeyvalue() вернет false, и мы не будем пропускать последнюю запись в каждом входном разделении?
1 ответ
Решение
nextKeyValue()
либо переходит к следующему ключу / значению и возвращает значение true, либо достигает конца и возвращает значение false. Поэтому, когда nextKeyValue()
возвращает истину в последний раз getCurrentKey()
а также getCurrentValue()
получит окончательный ключ / значение для разделения.