복붙노트

[HADOOP] PIG의 특정 필드 만로드 하시겠습니까?

HADOOP

PIG의 특정 필드 만로드 하시겠습니까?

이것은 내 파일입니다.

Col1, Col2, Col3, Col4, Col5

나는 Col2와 Col3 만 필요하다.

현재 나는 이것을하고있다.

a = load 'input' as (Col1:chararray, 
                     Col2:chararray, 
                     Col3:chararray, 
                     Col4:chararray);
b = foreach a generate Col2, Col3;

직접 입력을로드 한 다음 필수 열을 생성하는 대신 Col2 및 Col3 만 직접로드 할 수있는 방법이 있습니까?

해결법

  1. ==============================

    1.원하는 열만 생성하는 방법은 요청한 것만 수행하는 효과적인 방법입니다. 모든 데이터는 HDFS에 저장되므로 스크립트를 시작할 때 메모리에 데이터를 모두로드하지는 않습니다. 처리에 사용하기 위해 보관하지 않아도 디스크에서 해당 바이트를 읽어야하므로 해당 데이터를 절대로로드 할 수 없다는 성능상의 이점이 있습니다. 이점은 결코 당신이 당신의 방법으로 달성 한 감속기에 그것을 보낼 필요 없다에 온다.

    원하는 열만 생성하는 방법은 요청한 것만 수행하는 효과적인 방법입니다. 모든 데이터는 HDFS에 저장되므로 스크립트를 시작할 때 메모리에 데이터를 모두로드하지는 않습니다. 처리에 사용하기 위해 보관하지 않아도 디스크에서 해당 바이트를 읽어야하므로 해당 데이터를 절대로로드 할 수 없다는 성능상의 이점이 있습니다. 이점은 결코 당신이 당신의 방법으로 달성 한 감속기에 그것을 보낼 필요 없다에 온다.

    돼지가 칼럼을 사용하지 않는다고 말할 수있는 경우, 칼럼을 즉시 "제거"하여 본질적으로 b = foreach a 생성 Col2, Col3; 그러나 다른 필드에 액세스 할 수있는 UDF를 사용하는 경우 Pig는 UDF가 사용되는지 여부를 확인하지 않으므로 이런 일이 발생하지 않습니다. 예를 들어 Col3이 int라고 가정합니다. 당신이 가지고 있다면

    b = group a by Col2;
    c = foreach b generate group, SUM(a.Col3);
    

    Pig는 사용되지 않는 것을 볼 수 있으므로 자동으로 1, 4 열을 잘라냅니다. 그러나 대신에

    b = group a by Col2;
    c = foreach b generate group, COUNT(a);
    

    그런 다음 PIG는 COUNT UDF 내부에서 볼 수 없으며 다른 필드가 사용되지 않을 것이기 때문에 돼지를 잘라낼 수 없습니다. 돼지가이 가지 치기를 할 것인지 의심 스러울 때 이미 가지고있는 foreach / generate 메서드를 사용할 수 있습니다. 그리고 Pig는 스크립트를 시작했을 때 그것이 제거 할 수있는 모든 열을 나열 할 때 진단 메시지를 출력해야합니다.

    일부 열에 관심이있을 때 전체 스키마를 제공하지 않아도되는 문제가 아니라면 스키마를 완전히 건너 뛰고 GENERATE에 넣을 수 있습니다.

    a = load 'input';
    b = foreach a generate (chararray) $1 as Col2, (chararray) $2 as Col3;
    
  2. from https://stackoverflow.com/questions/20858990/load-only-particular-field-in-pig by cc-by-sa and MIT license