Как я могу использовать несколько входных файлов в качестве входного файла? - PullRequest
1 голос
/ 27 декабря 2010

Я хочу использовать несколько файлов (фактически 2 файла) в качестве входных файлов.

они имеют одинаковые шаблоны данных.наконец, я хочу получить данные из двух входных файлов. Например,

во входном файле A,

A 1
B 2
C 3

во входном файле B,

A 1
C 3
D 4

В конце я хочу сгенерировать выходной файл наподобие

B 2

(да, это результат A - B).

Как мне достичь этой ситуации с помощью hadoop

1 Ответ

3 голосов
/ 28 декабря 2010

Конечно, особенно если вы не заботитесь о порядке строк.

Во-первых, ваш маппер должен выдавать (line, filename) пары:

File A:
(0, "A 1")→("A 1", A)
(4, "B 2")→("B 2", A)
(8, "C 3")→("C 3", A)
File B:
(0, "A 1")→("A 1", B)
(4, "C 3")→("C 3", B)
(8, "D 4")→("D 4", B)

(Предполагается, что вы 'повторно используя TextInputFormat в качестве InputFormat, поэтому входящий ключ - это позиция в файле. Вы можете получить имя файла с ((FileSplit) context.getInputSplit()).getPath() в функции карты.)

В уменьшенииНа этапе Hadoop соберет значения (имена файлов), связанные с каждым ключом (строкой), и передаст их вашему редуктору.В вашем редукторе вы должны испускать только те строки, которые имеют только имя файла A , и ничего не испускают для остальных:

("A 1",{A,B})→nothing
("B 2",{A})→"B 2"
("C 3",{A,B})→nothing
("D 4",{B})→nothing

Результатом будут только строки, которыенаходятся только в файле A .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...