Карта уменьшает проблему порядка списка значений - PullRequest
1 голос
/ 26 сентября 2011

Как мы знаем, Hadoop группирует значения по ключам и отправляет их в одну и ту же задачу сокращения. Предположим, у меня есть следующие строки в файле на hdfs. line1 line2 line3 .... белье В задании карты я печатаю имя файла и строку. В редукте я получаю в разных порядках. Например, ключ => {line3, line1, line2, ....} Теперь у меня есть следующая проблема. Я хочу получить этот список значений для того, чтобы они лежали в файле, as key => {line1, line2, ... linen} Есть ли способ сделать это?

1 Ответ

2 голосов
/ 26 сентября 2011

Если вы используете TextInputFormat, вы получите <LongWritable, Text> в качестве ввода картографа. Часть LongWritable (или ключ) - это позиция строки в файле (я думаю, что это не номер строки, а позиция от начала файла). Вы можете использовать эту часть, чтобы отслеживать, какая строка была первой. Например, преобразователь может выводить <Filename, TextPair(Position, Line)> как вывод вместо <Filename, Line>, как вы делаете сейчас. Затем вы можете отсортировать ключи, которые получает редуктор, на основе первой части пары (позиция), и вы должны вернуть строки в том же порядке.

...