ログ ファイル内の行を解析し、情報を pig に返すために Java で記述されたユーザー定義関数 (UDF) があるため、すべての処理を行うことができます。
次のようになります。
public abstract class Foo extends EvalFunc<Tuple> {
public Foo() {
super();
}
public Tuple exec(Tuple input) throws IOException {
try {
// do stuff with input
} catch (Exception e) {
throw WrappedIOException.wrap("Error with line", e);
}
}
}
私の質問は、IOException をスローした場合、完全に停止するか、それとも例外をスローしない残りの行の結果を返すかということです。
例: これを pig で実行します
REGISTER myjar.jar
DEFINE Extractor com.namespace.Extractor();
logs = LOAD '$IN' USING TextLoader AS (line: chararray);
events = FOREACH logs GENERATE FLATTEN(Extractor(line));
この入力で:
1.5 7 "Valid Line"
1.3 gghyhtt Inv"alid line"" I throw an exceptioN!!
1.8 10 "Valid Line 2"
それは 2 行を処理し、「ログ」には 2 つのタプルがありますか、それとも単に火事で死ぬのでしょうか?