2014-11-12 3 views
0

여기 돼지 코드를 넣습니다. 이 코드를 실행하려고하면 오류가 발생합니다. 디버깅 할 수 없습니다. 어느 누구라도 코드 디버깅에 도움이 될 수 있습니까? 입력 및 출력 결과와 함께 답을 게시하십시오.데이터 세트 hadoop

사람들에게 입력 및 출력 결과에 대한 문제를 대답하도록 요청할 것입니다. 부디.

답변

0

이 데이터 집합의 문제는 여러 문자가 구분 기호 "::"로 나타납니다. 돼지에서는 여러 문자를 구분 기호로 사용할 수 없습니다. 당신이이 사이트 http://www.grouplens.org/datasets/movielens/을에서 데이터 집합을 다운로드 옵션을 시도 3 개 가지 옵션

1. Use REGEX_EXTRACT_ALL build-in function(need to write regex for this input) 
2. Write custom UDF 
3. Replace the multiple character delimiter to single character delimiter(This is very simple). 

이이 문제를 해결하려면 3

1. Go to your input folder /home/bigdata/sample/inputs/ 
    2. Run this sed command 
     >> sed 's/::/$/g' movies.dat > Testmovies.dat 
     >> sed 's/::/$/g' ratings.dat > Testratings.dat 
     >> sed 's/::/$/g' users.dat > Testusers.dat 

이 하나에 여러 문자 구분 기호를 ':'으로 변환됩니다 문자 구분 기호 '$'. '$'는 3 개의 파일 모두에서 구분 기호 bcoz로 선택했습니다. '$'는 없습니다.

3. Now load the new input files(Testmovies.dat,Testratings.dat,Testusers.dat) in the pig script using '$' as a delimiter 

는 돼지 스크립트를 수정 : 나는 돼지 로컬 모드에서 당신의 제안을 위의 코드를 실행하기 위해 노력했다

-- filtering action and war movies 
    A = LOAD 'Testmovies.dat' USING PigStorage('$')as (MOVIEID: chararray,TITLE:chararray,GENRE: chararray); 
    B = filter A by ((GENRE matches '.*Action.*') AND (GENRE matches '.*War.*')); 
    -- finding action and war movie ratings 
    C = LOAD 'Testratings.dat' USING PigStorage('$')as (UserID: chararray, MovieID:chararray, Rating: int, Timestamp: chararray); 
    D = JOIN B by $0, C by MovieID; 
    -- calculating avg 
    E = group D by $0; 
    F = foreach E generate group as mvId, AVG(D.Rating) as avgRating; 
    -- finding max avg-rating 
    G = group F ALL; 
    H = FOREACH G GENERATE MAX(F.$1) AS avgMax; 
    -- finding max avg-rated movie 
    I = FILTER F BY (float)avgRating == (float)H.avgMax; 
    -- filtering female users age between 20-30 
    J = LOAD 'Testusers.dat' USING PigStorage('$') as (UserID: chararray, Gender: chararray, Age: int, Occupation: chararray, Zip: chararray); 
    K = filter J by ((Gender == 'F') AND (Age >= 20 AND Age <= 30)); 
    L = foreach K generate UserID; 
    -- finding filtered female users rated movies 
    M = JOIN L by $0, C by UserID; 
    -- finding filtered female users who rated highest rated action and war movies 
    N = JOIN I by $0, M by $2; 
    -- finding distinct female users 
    O = foreach N generate $2 as User; 
    Q1 = Distinct O; 
    DUMP Q1; 

    Sample Output: 
    (5763) 
    (5785) 
    (5805) 
    (5808) 
    (5812) 
    (5825) 
    (5832) 
    (5852) 
    (5869) 
    (5878) 
    (5920) 
    (5955) 
    (5972) 
    (5974) 
    (6009) 
    (6036) 
+0

. 그러나 다음과 같은 오류가 발생하여 출력이 나지 않습니다. – blackbookstar

+0

입력 : "/home/bigdata/movies/Testratings.dat"에서 2000360 레코드를 성공적으로 읽음 "/home/bigdata/movies/Testusers.dat"에서 6040 레코드를 성공적으로 읽음 58 레코드를 성공적으로 읽음 : "/home/bigdata/movies/Testratings.dat" "/home/bigdata/movies/Testmovies.dat"에서 3883 개의 레코드를 성공적으로 읽음 출력 : 성공적으로 "file :/TMP는/temp1612815615/tmp206540224 " 카운터 : 총 레코드를 작성 : 0 총 바이트 작성 : 0 Spillable 메모리 관리자 유출 수 : 사전에 유출 0 총 가방 : 0 적극적으로 기록한 총 기록 : 0 – blackbookstar

+0

2014-12-07 16 : 32 : 40,346 [main] WARN org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - ACCESSING_NON_EXISTENT_FIELD에 6009020 시간의 경고가 발생했습니다. 2014-12-07 16 : 32 : 40,348 [main] 정보 org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - 성공! 2014-12-07 16 : 32 : 40,355 [main] WARN org.apache.pig.data.SchemaTupleBackend - SchemaTupleBackend가 이미 초기화되었습니다. – blackbookstar