Я новичок в Pig latin и пытаюсь реализовать UDF, но получаю следующую ошибку.Ошибка ClassCastException при загрузке UDF в Pig Latin
Ошибка
[main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: Pig script failed to parse:
<line 5, column 28> Failed to generate logical plan. Nested exception: java.lang.ClassCastException: power cannot be cast to org.apache.pig.EvalFunc
Details at logfile: /home/training/pig_1392253062989.log
Script
REGISTER 'hdfs://cloudera-vm:8020/user/training/pig/pow.jar';
base = load 'hdfs://cloudera-vm:8020/user/training/pig/base' using PigStorage(',') as (id:int,base:int);
exponent = load 'hdfs://cloudera-vm:8020/user/training/pig/exponents' using
PigStorage(',') as (id:int,exp:int);
tab = join base by id, exponent by id;
tab2 = foreach tab generate $1 as base, $3 as exp;
fin = foreach tab2 generate power(tab2.$0,tab2.$1);
UDF
import java.io.IOException;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
public class power extends EvalFunc<Integer>
{
public Integer exec(Tuple arg0) throws IOException {
int base = (Integer)arg0.get(0);
int exponent = (Integer)arg0.get(1);
int result=1;
for(int i=1;i<=exponent;i++)
result=result*base;
return result;
}
}
Da те Файлы
Base
1,2
2,3
3,4
4,5
5,6
6,7
7,8
8,9
9,10
exponents
1,2
2,3
3,3
4,4
5,2
6,5
7,7
8,4
9,5
Приставка ваш UDF вызов с именем банку. pow.power (tab2. $ 0, tab2. $ 1) – Chiron
Все еще не работает fin = foreach tab2 generate pow.power (tab2. $ 0, tab2. $ 1); 2014-02-12 21: 23: 57,634 [main] ERROR org.apache.pig.tools.grunt.Grunt - ОШИБКА 1070: Не удалось разрешить pow.power с помощью импорта: [, org.apache.pig.builtin ., org.apache.pig.impl.builtin.] Подробности в файле журнала: /home/training/pig_1392258175870.log – user3301448
Вы проверили /home/training/pig_1392258175870.log? – Chiron