2017-05-20 7 views
0

그래서 Apache PIG의 초보자입니다. 일부 데이터를 그룹화하고 추가 처리를 위해 사용자 정의 함수에 그룹화의 결과를 보냅니다. 따라서 데이터는 CSV는이Apache PIG - GROUP BY의 전체 결과가 사용자 정의 함수로 전달되지 않음

DAY;STATION;HOUR;TEMPERATURE 

내 돼지 파일의 코드를 다음과 같습니다

REGISTER /path/to/jar/myUdf.jar; 
weather_data = LOAD 'file:///path/to/file/weather_small.csv' USING PigStorage(';') AS (date:chararray, station:int, hour:int, temperature:Bigdecimal); 
by_hour = GROUP weather_data by (hour, date); 
DUMP by_hour 
to_udf = FOREACH by_hour GENERATE myUdfs.Test(); 
STORE to_udf INTO 'myoutput' using PigStorage(','); 

내 사용자 정의 함수 코드, 나는 모든 데이터를 받고 있지 않다 원인 아직 아무것도 안하고 :

package myUdfs; 
import java.io.IOException; 
import org.apache.pig.EvalFunc; 
import org.apache.pig.data.Tuple; 

public class Test extends EvalFunc<String> { 
    @Override 
    public String exec(Tuple tuple) throws IOException { 
     return tuple.toString(); 
    } 
} 

이것은 DUMP 명령의 출력입니다. 이 값은 통화 별 그룹의 실제 결과입니다.

Output of dump command

하고 마침내는 볼 수 있듯이, 출력이 다른 최종 감속기 출력 파일

((24,11/23/2000),{(11/23/2000,24)}) 
((24,11/23/2013),{(11/23/2013,24)}) 
((24,11/27/2009),{(11/27/2009,24)}) 
((24,11/30/2000),{(11/30/2000,24)}) 
((24,12/10/2013),{(12/10/2013,24)}) 
((24,12/13/2009),{(12/13/2009,24)}) 
((24,12/14/2007),{(12/14/2007,24)}) 
((24,12/23/2008),{(12/23/2008,24)}) 
((24,12/24/2007),{(12/24/2007,24)}) 

의 데이터이다. 스테이션 및 온도 정보가 사용자 정의 기능으로 전송되지 않습니다. 하지만 전화로 그룹에서 나온 원래의 가방에 있습니다.

사용자 정의 함수에 모든 정보를 보내야합니다. 그래서 온도와 방송국 정보는 udf에 전달해야합니다.

죄송합니다. 긴 게시물은 죄송하지만이 문제를 명확하게 설명 할 수있는 유일한 방법이었습니다.

답변

0

당신은 당신의 UDF 함수에 아무것도 전달하지 않았고 실제로는 '약간은 그룹이 시도 자동으로

통과 놀라 울 것을

to_udf = FOREACH by_hour GENERATE myUdfs.Test(weather_data);