2015-06-04 2 views
1

Есть два отношенияСоединить поля из разных отношений

r1: {f1: chararray, f2: chararray} 
r2: {f3: chararray, f4: chararray} 

Там нет уникального ключа ни в одном из отношений, но число кортежей одинаковы.

Есть ли способ связать соответствующие поля отношений, чтобы получить выход как f2, f4?

ответ

3

Если кортежи находятся в правильном порядке, вы можете использовать RANK.

r1a = RANK r1 BY * DENSE; 
r2a = RANK r2 BY * DENSE; 

r1r2 = JOIN r1a BY $0, r2a BY $0; 
+1

В случае, если не присоединиться быть на $ 0? –

+0

Это правильно;) – glefait

0

Другой альтернатива была бы использовать: крестик (http://pig.apache.org/docs/r0.12.0/basic.html#cross)

Примечания: Выписка из Документов: Перекрестный является дорогостоящей операцией, которую следует использовать с осторожностью.

Pig Сценарий:

R1 = LOAD 'a.csv' USING PigStorage(',') AS (f1:chararray,f2:chararray); 
R2 = LOAD 'b.csv' USING PigStorage(',') AS (f3:chararray,f4:chararray); 

R3 = CROSS R1,R2; 

R4 = FOREACH R3 GENERATE f2,f4; 

DUMP R4; 

Входы:

a.csv:

f1_value,f2_value 

b.csv

f3_Value,f4_value 

Выход: DUMP R4:

(f2_value,f4_value) 
+2

Крест не работает, потому что вам не требуется полное перекрестное соединение, но только для объединения строк, имеющих одинаковый номер строки. – glefait

+0

@glefait: Согласен! –

Смежные вопросы