Как я могу правильно выполнить это внутреннее соединение в Apache PIG? - PullRequest
0 голосов
/ 17 октября 2011

У меня есть два файла, один называется a-records

123^record1
222^record2
333^record3

и другой файл с именем b-records

123^jim
123^jim
222^mike
333^joe

вы можете видеть в файле A, что у меня есть токен 123 один раз. В файле B он там дважды. Есть ли способ, используя Apache PIG, я могу объединить данные так, чтобы я получал только ОДНУ присоединенную запись из файла A?

вот мой текущий скрипт, который выводит следующее

arecords = LOAD '$a'  USING PigStorage('^')  as (token:chararray, type:chararray);

brecords =  LOAD '$b'  USING PigStorage('^')  as (token:chararray, name:chararray);


x = JOIN arecords BY token, brecords BY token;

dump x;

, что дает:

(123,record1,123,jim)
(123,record1,123,jim)
(222,record2,222,mike)
(333,record3,333,joe)

когда я ДЕЙСТВИТЕЛЬНО хочу (обратите внимание, что маркер 123 находится там только один раз после объединения)

(123,record1,123,jim)
(222,record2,222,mike)
(333,record3,333,joe)

есть идеи? Большое спасибо

1 Ответ

4 голосов
/ 17 октября 2011

Я бы сделал что-то вроде этого:

arecords = LOAD '$a'  USING PigStorage('^')  as (token:chararray, type:chararray);

brecords =  LOAD '$b'  USING PigStorage('^')  as (token:chararray, name:chararray);

bdistinct = DISTINCT brecords;

x = JOIN arecords BY token, bdistinct BY token;

dump x;
...