2016-09-22 5 views
0

나는 돼지에 완전히 새로운 있습니다. 두 개의 관계 A와 B의 여러 열을 iid 필드를 사용하여 결합하고 싶습니다. 이것은 간단하게 보이지만 올바르게 수행하는 방법을 알아낼 수 없다. 조인을 시도했지만 일반적으로 아무런 열도 없으므로 아무 것도하지 않는다. 그래서 여기돼지에 여러 열을 결합 하시겠습니까?

내 데이터입니다 :

A 
FullName Age CIN 

B  
evaluation productivty 

그리고 내 출력은 다음과 같이 할 것을 권장합니다

FullName Age CIN Evaluation Productivty 

.. .. .. .. ..

감사

+0

두 데이터 시트를 합치려면 최소한 하나의 데이터 시트가 공통이어야합니다. –

+0

다른 방법이 없으십니까? –

답변

0

두 개의 관계를로드하고 모든 열을 사용하여 새 관계를 만듭니다. 두 파일 모두 동일한 수의 행과 필드 탭 구분됩니다. 데이터를 기반으로 올바른 데이터 형식을 사용할 수 있습니다.

A = LOAD 'data1.txt' USING PigStorage('\t') as (FullName:chararray,Age:int,CIN:int); 
B = LOAD 'data2.txt' USING PigStorage('\t') as (Evaluation:chararray,Productivity:chararray); 
C = FOREACH A GENERATE A.Fullname,A.Age,A.CIN,B.Evaluation,B.Productivity; 
DUMP C; 
0

두 테이블을 결합하려면 공통 키가 있어야합니다. 키없이 두 데이터 세트를 결합하려면 CROSS를 사용할 수 있습니다. 두 데이터 세트의 외적을 계산합니다.

A = LOAD 'a.txt' AS (FullName, Age, CIN); 
B = LOAD 'b.txt' AS (evaluation, productivity); 
C = CROSS A,B; 

당신은 라인으로 라인에 가입하고 당신이 해킹으로 (돼지 0.14 이상에만 해당)에서 UniqueID를 사용

A = LOAD 'a.txt' AS (FullName, Age, CIN); 
B = LOAD 'b.txt' AS (evaluation, productivity); 
A1 = FOREACH A GENERATE *, UniqueID(FullName) AS id; 
B1 = FOREACH B GENERATE *, UniqueID(evaluation) AS id; 
C = JOIN A1 BY id, B1 BY id; 
D = FOREACH C GENERATE FullName, Age, CIN, evaluation, productivity; 

이 완전 수, 데이터가 모두 파일에 순서대로 가정 할 경우 UniqueID의 구현에 의존하며 다음 버전에서 로직이 변경되는 경우 원하는 결과를 가져 오지 않을 수 있습니다.

관련 문제