我正在試驗Pig UDF。我能夠得到像大寫字母這樣簡單的UDF爲我工作。所以我試圖寫我自己的UDF。我想處理包含3個整數的輸入文件的每一行。如果3個整數滿足直角三角形邊的條件,則返回斜邊,否則返回null。PigLatin - 本地模式 - 錯誤1066:無法打開別名的迭代器B
但我得到下面的錯誤 - 錯誤1066:無法打開迭代器的別名乙
這裏是豬腳本代碼 -
-- 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);
}
}
}
我想知道我在做什麼錯在這裏。任何指針讚賞。謝謝。
對於在尋找[錯誤1066:無法打開迭代器別名]時發現此帖子的人(http://stackoverflow.com/questions/34495085/error-1066-unable-to-open-iterator-for- alias-in-pig-generic-solution)這裏是一個[通用解決方案](http://stackoverflow.com/a/34495086/983722)。 – 2015-12-28 15:33:35