2014-07-11 2 views
0

두 데이터 세트를 추가아파치 돼지 : 나는 두 개의 데이터가 하나의

첫번째 집합

(111)

(222)

(555)

2 설정 세트 B

(333)

,

(444)

(666)

제가 UNION C = A, B 않았다;

개의 데이터를 추가 한 후에는 출력

예상 출력 C 세트 첫번째 데이터 세트하고 다음 제 2 데이터된다

(111)

(222)

(555)

이어야 설정

(333)

(444)

(666)하지만 내 출력 C는

(333)

(444)

(666)

(111)

(222)

(555)

결과가 비 순번 인 경우 설정 순서대로 추가하기가 어렵습니다. 어떻게하면됩니까? 나는 어떤 도움도 생각하지 못할 것이다.

+0

'주문'. 그게 당신이 그들을 정렬 할 수있는 열쇠 A와 B를 포함해야합니다 – Frederic

+0

의견을 주셔서 감사합니다 여기에 내가 세트 A와 B 모두에서 하나의 열을 가지고 출력은 행의 순서가되어서는 안됩니다 에 있어야합니다 집합 A의 모든 행과 같은 집합 의 순서가 먼저오고 두 번째 집합 B 행 이 문제에 대한 해결책을 찾을 수 없습니다. –

답변

1

는 file_number을주는 각 파일에 여분의 열을 추가하고 열 기부를 기반으로 정렬하여 다음, 수정 된 데이터 세트의 조합을 'file_number'

A = LOAD 'A.txt' USING PigStorage() AS (a:int); 
B = LOAD 'B.txt' USING PigStorage() AS (b:int); 
A_mod = FOREACH A GENERATE a, 1 AS file_number; 
B_mod = FOREACH A GENERATE b, 2 AS file_number; 
unified_mod = UNION A_mod, B_mod; 
output = SORT unified_mod BY file_number; 
+0

나는 똑같은 일을했습니다 ... 고맙습니다 !!! –

0

고전적인 조합을 사용해 본 결과, 데이터는 순서대로 유지됩니다.

그러나의 강제-을하려고 나는 그것이 효율적이지의 이전 코멘트 말했다뿐만 아니라이

을 :)하지 않고이 일을하게하면 할 수 있습니다.

--In order to determine nbA you can run the following cmd in the shell : wc -l A.txt 
%default nbA 3 

A = LOAD 'A.txt' USING PigStorage() AS (a:int); 
B = LOAD 'B.txt' USING PigStorage() AS (b:int); 

A = RANK A; 
B = RANK B; 

--DESCRIBE B; 
B = FOREACH B GENERATE rank_B + $nbA, $1; 

C= UNION B,A; 
C= ORDER C BY $0; 
C= FOREACH C GENERATE $1; --If you want to drop the first column 
DUMP C; 

출력 :

(111) 
(222) 
(555) 
(333) 
(444) 
(666) 

:

A.TXT

111 
222 
555 

그리고 B.txt는 :

333 
444 
666 
관련 문제