2012-11-30 2 views
2

Я создал UDF_UPPER.jar файл в /home/GED385/pigScripts.PIG UDF в JAVA ERROR 1070

[[email protected] 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 

свинью скрипты:

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; 

ответ

0

Что ява пакет делает ваш ВЕРХНИЙ класс принадлежит?

Вам нужно будет квалифицировать свой класс 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); 
+0

Если вы посмотрите на это: 'import: [, org.apache.pig.builtin., Org.apache.pig.impl.builtin.]' Вы видите, что банка никогда не импортируется в первую очередь. –

0
using imports: [, org.apache.pig.builtin., org.apache.pig.impl.builtin.] 

Это говорит мне, что Piggybank и ваша баночка никогда не получать фактически импортированы.

Я думаю, что это связано с вы даете абсолютный путь для файлов .jar.

Вместо этого просто сделать REGISTER UDF_UPPER.jar.

0

Согласно следующему выходу,

[[email protected] 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); 

Надежда, это может помочь решить проблема.

Смежные вопросы