2013-10-31 4 views
2

저는 Pig를 통해 문자열을 입력으로받는 UDF jar 파일을 가지고 있습니다.돼지를 사용하여 Java를 통해 문자열을 실행하십시오.

내 문제는 내가 텍스트 파일의 정보를 얻으려고 노력하고있다이 자바 파일은

B = foreach f generate URL_UDF.mathUDF('stack.overflow'); 

이 내게 기대하는 출력을 줄 것이다이 명령으로 '하드 코딩'문자열을 실행하는 것과 잘 돼지 통해 작동 내 UDF를 함께 사용하십시오. 파일을로드하고 UDF에로드 한 파일 내에서 데이터를 전달하려고합니다.

LoadData = load 'data.csv' using PigStorage(','); 
f = foreach LoadData generate $0 as col0, $1 as chararray 

$ 1 I 필요한 열과 연구 데이터 유형 (http://pig.apache.org/docs/r0.7.0/piglatin_ref2.html#Data+Types) 문자 배열을 사용하는 것이다.

다음 명령을 사용하여 시도했습니다. B = foreach f generate URL_UDF.mathUDF ($ 1);

는 사람이 좋은 것이 어떤 솔루션이있는 경우

java.lang.ClassCastException: org.apache.pig.data.DataByteArray cannot be cast to java.lang.String 

을 알리는 실패 항아리에 데이터를 전달합니다. 당신은

LoadData = load 'data.csv' using PigStorage(',') AS (col0: chararray, col1:chararray); 

을 다음과 같이 LOAD와 스키마를 지정하고 UDF에 col1를 전달할 수 있습니다

package URL_UDF; 

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 

import java.io.InputStream; 
import java.io.InputStreamReader; 

import org.apache.pig.FilterFunc; 
import org.apache.pig.data.Tuple; 
import org.apache.pig.EvalFunc; 
import org.apache.pig.PigWarning; 
import org.apache.pig.data.Tuple; 
import org.apache.commons.logging.Log; 
import org.apache.*; 

public class mathUDF extends EvalFunc<String> { 

public String exec(Tuple arg0) throws IOException { 
    // TODO Auto-generated method stub 
    try{ 

     String urlToCheck = (String) arg0.get(0); 

     return urlToCheck; 
    }catch (Exception e) { 
     // Throwing an exception will cause the task to fail. 
     throw new IOException("Something bad happened!", e); 
    } 
} 

} 

감사

답변

7

을 다음과 같이

내가 실행하고 자바 코드입니다.

또는 실제로

B = foreach LoadData generate (chararray)$1 AS col1:chararray; 

,이 0.12.1 고정한다 돼지 버그 ( PIG-2315)이다. foreach의 AS 절이 예상대로 작동하지 않습니다.

+0

답장을 보내 주셔서 감사합니다. 불행하게도 여전히 실패 할 수 있습니다. – user2931635

+0

그러면 UDF에서 오류 일 수 있습니다. 코드를 게시 할 수 있습니까? – Frederic

+0

위에서 추가 한 내용은 현재 실행중인 간단한 예입니다. 나는 아무것도하지 않는다는 것을 안다. 그러나 이것조차도 여전히 실패한다. – user2931635

관련 문제