복붙노트

[HADOOP] 돼지 :리스트에 변수 위에 루프를 쓸 수 있습니까?

HADOOP

돼지 :리스트에 변수 위에 루프를 쓸 수 있습니까?

목록에서 30 개 이상의 변수를 반복해야합니다.

[var1, var2, ..., var30]

각 변수에 대해 다음과 같은 문으로 PIG 그룹을 사용합니다.

grouped = GROUP data by var1;
data_var1 = FOREACH grouped{
                            GENERATE group as mygroup,
                                     COUNT(data) as count;
                            };

변수 목록을 반복하는 방법이 있습니까? 아니면 코드에서 수동으로 30 번 이상 반복해야합니까?

감사!

해결법

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

    1.네가 찾고있는 건 돼지 고기 야.

    네가 찾고있는 건 돼지 고기 야.

    30 개의 변수에 대한 관계를 만들고 foreach를 사용하여 반복하고 두 개의 매개 변수를 갖는 매크로를 호출하십시오. 데이터 관계와 그룹으로 묶을 변수입니다. 매크로가 실제로하고 싶은 것과 비슷한 링크의 예제를 확인하십시오.

    업데이트 및 코드

    그래서 여기에 사용할 수있는 매크로가 있습니다.

    DEFINE my_cnt(data, group_field) RETURNS C {
            $C = FOREACH (GROUP $data by $group_field) GENERATE
                    group AS mygroup,
                    COUNT($data) AS count;
    };
    

    매크로 사용 :

    IMPORT 'cnt.macro';
    
    data = LOAD 'data.txt' USING PigStorage(',') AS (field:chararray, value:chararray);
    DESCRIBE data;
    
    e = my_cnt(data,'the_field_you_group_by');
    DESCRIBE e;
    DUMP e;
    

    나는 당신이 그룹화하고자하는 분야에서 어떻게 반복 할 수 있는지 생각 중입니다. 관계가 잘못되어있는 파일명이 포함 된 것을 foreach하는 나의 원래 제안. (이것을위한 UDF를 만들려면 항상 작동합니다.) 생각해 봅시다. 그러나이 매크로는 그룹화하려는 모든 파일 이름을 호출 할 때 그대로 작동합니다.

  2. from https://stackoverflow.com/questions/37029980/pig-is-it-possible-to-write-a-loop-over-variables-in-a-list by cc-by-sa and MIT license