Pig UDF を試しています。大文字のような単純なUDFを取得できます。そのため、独自の UDF を作成しようとしていました。3 つの整数を含む入力ファイルの各行を処理したいと考えています。3 つの整数が直角三角形の辺の基準を満たす場合、斜辺が返されます。それ以外の場合は null が返されます。
しかし、次のエラーが発生します - エラー 1066: エイリアス B のイテレータを開けません
これが豚のスクリプトコードです -
-- rat.pig - A Pig script to test right angle triangle
REGISTER /Users/admin/Programming/PigUDF/bin/myudfs/myudfs.jar;
A = LOAD '/Users/admin/Programming/pigdata/triangle.csv' AS (sides: tuple(side_0:int, side_1:int, side_2:int));
B = FILTER A BY (myudfs.RAT(A.sides)!= 0);
DUMP B;
UDFは次のようなものです
パッケージ myudfs;
import java.io.IOException;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
public class RAT extends EvalFunc<Integer>{
public Integer exec(Tuple input) throws IOException {
if (input == null || input.size() == 0) {
return null;
}
try {
int num_0 = (Integer)input.get(0);
int num_1 = (Integer)input.get(1);
int num_2 = (Integer)input.get(2);
if ((num_0 * num_0) + (num_1 * num_1) == num_2 * num_2)
return Integer.valueOf(num_2);
else if ((num_0 * num_0) + (num_2 * num_2) == num_1 * num_1)
return Integer.valueOf(num_1);
else if ((num_1 * num_1) + (num_2 * num_2) == num_0 * num_0)
return Integer.valueOf(num_0);
else {
return null;
}
} catch (Exception e) {
throw new IOException(" Caught exception processing input row", e);
}
}
}
私はここで何が間違っているのだろうと思っていました。どんなポインタでも大歓迎です。ありがとう。