저는 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);
}
}
}
감사
답장을 보내 주셔서 감사합니다. 불행하게도 여전히 실패 할 수 있습니다. – user2931635
그러면 UDF에서 오류 일 수 있습니다. 코드를 게시 할 수 있습니까? – Frederic
위에서 추가 한 내용은 현재 실행중인 간단한 예입니다. 나는 아무것도하지 않는다는 것을 안다. 그러나 이것조차도 여전히 실패한다. – user2931635