Свинья UDF в JAVA ОШИБКА 1070
Я создал UDF_UPPER.jar
файл в /home/GED385/pigScripts
,
[GED385@snshadoope1 pigScripts]$ jar tf /home/GED385/pigScripts/UDF_UPPER.jar | grep UPPER
UPPER.class
Но, выполняя свинью, я получаю ошибку ниже.
grunt> exec digital_web_trkg_9.pig
2012-11-30 00:15:32,027 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1070: Could not resolve UDF_UPPER.UPPER using imports: [, org.apache.pig.builtin., org.apache.pig.impl.builtin.]
Details at logfile: /data/1/GED385/pigScripts_digital/pig_1354233151486.log
Сценарии PIg:
REGISTER /usr/lib/pig/contrib/piggybank/java/piggybank.jar;
REGISTER /home/GED385/pigScripts/UDF_UPPER.jar;
A = LOAD '/user/GED385/digital/scrn_rsln_id_cln.dat' USING PigStorage('|')
AS (web_vstr_scrn_rsln_id:int,web_vstr_scrn_rsln_desc :chararray, edw_publn_id:chararray);
B = LOAD '/user/GED385/digital/scrn_rsln_id1_cln.dat' USING PigStorage('|')
AS (web_vstr_scrn_rsln_id:int,web_vstr_scrn_rsln_desc :chararray, edw_publn_id:chararray);
H = LOAD '/user/GED385/digital/scrn_rsln_id_base_unload_cln.dat' USING PigStorage('|')
AS (web_vstr_scrn_rsln_id_1:int,web_vstr_scrn_rsln_desc :chararray, edw_publn_id:chararray);
J = GROUP H BY edw_publn_id;
K = FOREACH J GENERATE group, MAX(H.web_vstr_scrn_rsln_id_1);
C = UNION A, B;
D = FILTER C BY web_vstr_scrn_rsln_desc is not null;
E = DISTINCT D;
F = JOIN E BY web_vstr_scrn_rsln_desc LEFT , H BY web_vstr_scrn_rsln_desc;
I = FILTER F BY H::web_vstr_scrn_rsln_id_1 is null;
--G = FOREACH I GENERATE H::web_vstr_scrn_rsln_id_1,E::web_vstr_scrn_rsln_desc,E::edw_publn_id;
G = FOREACH I GENERATE K.$1+1,E::web_vstr_scrn_rsln_desc,E::edw_publn_id,UDF_UPPER.UPPER(E::web_vstr_scrn_rsln_desc);
--L = JOIN G BY $2 LEFT , K BY $0;
DUMP G;
3 ответа
Согласно следующему выводу,
[GED385@snshadoope1 pigScripts]$ jar tf /home/GED385/pigScripts/UDF_UPPER.jar | grep UPPER
UPPER.class
UPPER.java не имеет пакета с именем "UDF_UPPER".
И с ошибкой 1070: вы пытаетесь импортировать класс UPPER внутри пакета UDF_UPPER.
UDF_UPPER.UPPER
средства "<package name>.<class name>"
Но поскольку в вашем банке нет пакета UDF_UPPER, используйте только UPPER
в сценарии свиньи, как показано ниже:
G = FOREACH I GENERATE K.$1+1,E::web_vstr_scrn_rsln_desc,E::edw_publn_id,UPPER(E::web_vstr_scrn_rsln_desc);
Надеюсь, это решит вашу проблему.
using imports: [, org.apache.pig.builtin., org.apache.pig.impl.builtin.]
Это говорит мне о том, что копилка и твой кувшин никогда не импортируются.
Я предполагаю, что это связано с тем, что вы даете абсолютный путь к файлам jar.
Вместо этого просто сделайте REGISTER UDF_UPPER.jar
,
К какому java-пакету относится ваш UPPER-класс?
Вам нужно будет квалифицировать свой UPPER класс с его именем пакета, чтобы свинья могла его найти. Вам не нужно ссылаться на имя файла JAR.
Так что, если ваш верхний класс принадлежал com.blah
Вы бы написали:
G = FOREACH I GENERATE K.$1+1,E::web_vstr_scrn_rsln_desc,E::edw_publn_id,com.blah.UPPER(E::web_vstr_scrn_rsln_desc);