복붙노트

[HADOOP] 돼지 또는 할프를 사용하여 평균을 찾는

HADOOP

돼지 또는 할프를 사용하여 평균을 찾는

나는 거대한 형태의 텍스트 파일을 가지고있다.

데이터는 디렉토리 data / data1.txt, data2.txt 등에 저장됩니다.

merchant_id, user_id, amount
1234, 9123, 299.2
1233, 9199, 203.2
 1234, 0124, 230
 and so on..

제가하고 싶은 것은 각 상인을위한 평균 금액을 찾는 것입니다 ..

그래서 기본적으로 내가 파일에 출력을 저장하고 싶습니다. ~ 같은

 merchant_id, average_amount
  1234, avg_amt_1234 a
  and so on.

표준 편차도 어떻게 계산합니까?

그런 기본적인 질문을해서 죄송합니다. :( 어떤 도움을 주시면 감사하겠습니다. :)

해결법

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

    1.Apache PIG는 이러한 작업에 잘 적응합니다. 예제보기 :

    Apache PIG는 이러한 작업에 잘 적응합니다. 예제보기 :

    inpt = load '~/pig_data/pig_fun/input/group.txt' as (amnt:double, id:chararray,c2:chararray);
    grp = group inpt by id;
    mean = foreach grp {
        sum = SUM(inpt.amnt);
        count = COUNT(inpt);
        generate group as id, sum/count as mean, sum as sum, count as count;
    };
    

    amnt 열의 데이터 유형에 특별한주의를 기울여야합니다. 그러면 SUM 함수의 구현 중 PIG가 호출 될 때 영향을 미칩니다.

    PIG는 SQL이 할 수없는 것을 할 수도 있고, 내부 조인을 사용하지 않고 각 입력 행에 대해 평균을 넣을 수도 있습니다. 이는 표준 편차를 사용하여 z- 점수를 계산할 때 유용합니다.

     mean = foreach grp {
        sum = SUM(inpt.amnt);
        count = COUNT(inpt);
        generate FLATTEN(inpt), sum/count as mean, sum as sum, count as count;
    };
    

    FLATTEN (inpt)은 트릭을 수행합니다. 이제 그룹 평균, 합계 및 개수에 기여한 원래 금액에 액세스 할 수 있습니다.

    업데이트 1 :

    분산 및 표준 편차 계산 :

    inpt = load '~/pig_data/pig_fun/input/group.txt' as (amnt:double, id:chararray, c2:chararray);
    grp = group inpt by id;
    mean = foreach grp {
            sum = SUM(inpt.amnt);
            count = COUNT(inpt);
            generate flatten(inpt), sum/count as avg, count as count;
    };
    tmp = foreach mean {
        dif = (amnt - avg) * (amnt - avg) ;
         generate *, dif as dif;
    };
    grp = group tmp by id;
    standard_tmp = foreach grp generate flatten(tmp), SUM(tmp.dif) as sqr_sum; 
    standard = foreach standard_tmp generate *, sqr_sum / count as variance, SQRT(sqr_sum / count) as standard;
    

    2 개의 작업을 사용합니다. 나는 하나에서 그것을하는 방법을 알아 내지 못했습니다, 흠, 그것에 더 많은 시간을 할애해야합니다.

  2. ==============================

    2.그래서 뭘 원해? 실행중인 Java 코드 또는 추상 map-reduce 프로세스를 원하십니까? 두 번째 :

    그래서 뭘 원해? 실행중인 Java 코드 또는 추상 map-reduce 프로세스를 원하십니까? 두 번째 :

    지도 단계 :

    record -> (merchant_id as key, amount as value)
    

    축소 단계 :

    (merchant_id, amount) -> (merchant_id, aggregate the value you want)
    

    reduce 단계에서와 같이 동일한 키를 가진 레코드 스트림이 제공되며 평균, 분산을 포함하여 거의 모든 것을 수행 할 수 있습니다.

  3. ==============================

    3.한 단계에서 표준 편차를 계산할 수 있습니다. 공식을 사용하여

    한 단계에서 표준 편차를 계산할 수 있습니다. 공식을 사용하여

    var=E(x^2)-(Ex)^2
    inpt = load '~/pig_data/pig_fun/input/group.txt' as (amnt:double,  id:chararray, c2:chararray);
    grp = group inpt by id;
    mean = foreach grp {
        sum = SUM(inpt.amnt);
        sum2 = SUM(inpt.amnt**2);
        count = COUNT(inpt);
        generate flatten(inpt), sum/count as avg, count as count, sum2/count-    (sum/count)**2 as std;
    };
    

    그게 다야!

  4. from https://stackoverflow.com/questions/12593527/finding-mean-using-pig-or-hadoop by cc-by-sa and MIT license