【问题标题】:PIG UDF in JAVA ERROR 1070JAVA 错误 1070 中的 PIG UDF
【发布时间】:2012-11-18 05:05:02
【问题描述】:

我在/home/GED385/pigScripts 中创建了UDF_UPPER.jar 文件。

[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;

【问题讨论】:

    标签: java mysql apache-pig mysql-error-1071


    【解决方案1】:

    你的 UPPER 类属于哪个 java 包?

    您需要使用包名限定您的 UPPER 类,以便 pig 找到它。不需要引用 jar 文件名。

    所以如果你的 UPPER 类属于 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);
    

    【讨论】:

    • 如果你看这个:imports: [, org.apache.pig.builtin., org.apache.pig.impl.builtin.] 你会发现 jar 从一开始就没有被导入。
    【解决方案2】:
    using imports: [, org.apache.pig.builtin., org.apache.pig.impl.builtin.]
    

    这告诉我,piggybank 和你的罐子永远不会真正导入。

    我的猜测是,这与您提供 jar 文件的绝对路径有关。

    相反,只需执行REGISTER UDF_UPPER.jar

    【讨论】:

      【解决方案3】:

      根据以下输出,

      [GED385@snshadoope1 pigScripts]$ jar tf /home/GED385/pigScripts/UDF_UPPER.jar | grep UPPER
      UPPER.class
      

      UPPER.java 没有名为“UDF_UPPER”的包。

      并且出现错误 1070:您正在尝试在 UDF_UPPER 包中导入 UPPER 类。

      UDF_UPPER.UPPER 表示 "<package name>.<class name>"

      但是由于你的 jar 中没有 UDF_UPPER 包,所以在 pig 脚本中只使用 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);
      

      希望,它可以解决您的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-30
        • 2013-04-27
        • 1970-01-01
        • 2015-09-23
        • 2014-03-25
        • 2016-12-04
        • 2013-12-10
        • 1970-01-01
        相关资源
        最近更新 更多