2014-04-16 4 views
0

열의 하위 집합에 DISTINCT 연산을 수행하고 싶습니다. 돼지에서 고유 한 여러 열 결합

A = LOAD 'data' AS(a1,a2,a3,a4,a5,a6); 

DUMP A; 

(1, 2, 3, 4,5,5_1) 

(1, 2, 3, 4,5,5_1) 

(1, 2, 3, 4,6,6_1) 

(1 ,2, 4, 4,7,7_1) 

(1, 2, 4, 4,8,8_1) 

-- insert DISTINCT operation on a1,a2,a3,a4 here: 

-- ... 
DUMP A_unique; 

(1, 2, 3, 4,5,5_1) 

(1, 2, 4, 4,7,7_1) 

는 이미 링크 언급했다 :

How to perform a DISTINCT in Pig Latin on a subset of columns?

를 그리고 두 가지 방법으로 아래의 사용 :

방법 1 :

1.DATA = LOAD '/usr/local/Input.txt' AS (a1,a2,a3,a4,a5,a6);  
2.DATA2 = FOREACH DATA GENERATE TOTUPLE(a1,a2,a3,a4) AS combined, a5 as a5,a6 as a6; 
3.grouped_by_a5_a6 = GROUP DATA2 BY combined; 

4.grouped_and_distinct = FOREACH grouped_by_a5_a6 { 

      combined_unique =LIMIT DATA2 1; 

        GENERATE FLATTEN(combined_unique); 
}; 
,451,515,

방법 2 :

DATA = LOAD '/usr/local/Input.txt' AS (a1,a2,a3,a4,a5,a6) ;   
A2 = FOREACH DATA GENERATE TOTUPLE(a1,a2,a3,a4) AS combined, a5 as a5,a6 as a6 ; 

grouped_by_a5_a6 = GROUP A2 BY (a5,a6); 

grouped_and_distinct = FOREACH grouped_by_a5_a6 { 

     combined_unique = DISTINCT A2.combined; 

     GENERATE FLATTEN(combined_unique); 
}; 

하지만 무엇입니까 대답과 같은 :

(1, 2, 3, 4,5,5_1) 
(1, 2, 3, 4,6,6_1) 
(1, 2, 4, 4,7,7_1) 
(1, 2, 4, 4,8,8_1) 

대신 :

(1, 2, 3, 4,5,5_1) 
(1, 2, 4, 4,7,7_1) 

는 위에서 언급 한 코드에 문제가 있습니까?

+0

(1, 2, 3, 4,6,6_1) 및 (1, 2, 4, 4,8,8_1)을 출력에 포함하면 안되는 이유는 무엇입니까? 나는 그들이 왜 걸러 지는지와 나에게 정확한 결과처럼 보이는 어떤 이유도 보지 못한다. – bridiver

+0

브리더 당신이 맞습니다. 그러나 제가 언급 한 것처럼 출력이 필요합니다. 코드의 변경을 제안 할 수 있습니까? – user2940111

+0

다른 레코드가 걸러지기를 기대하는 이유가 확실합니다. 필터링의 기초는 무엇입니까? – bridiver

답변

0

예상되는 내용은 해당 입력란의 고유 한 결과가 아닙니다. 원하는 출력을 얻으려면 필터를 적용해야합니다.