【问题标题】:PIG UDF import resolvePIG UDF 导入解析
【发布时间】:2016-07-06 23:34:15
【问题描述】:

UDF 的新手。借了另一篇文章作为模板,但我认为的原因不一样 ERROR 1070: Could not resolve myudfs.UPPER using imports: [, org.apache.pig.builtin., org.apache.pig.impl.builtin.]

脚本

register /home/tad/pig/myudf.jar;
quantiles = LOAD '/user/tad/quantiles' using PigStorage('\t','-schema');
--just one line of data
a = foreach quantiles generate 'a';
b = foreach a generate myudfs.UPPER($0);

功能

package myudfs;
import java.io.IOException;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;

public class UPPER extends EvalFunc<String>
{
  public String exec(Tuple input) throws IOException {
      if (input == null || input.size() == 0 || input.get(0) == null)
          return null;
      try{
          String str = (String)input.get(0);
         return str.toUpperCase();
      }catch(Exception e){
          throw new IOException("Caught exception processing input row ", e);
      }
  }
}

注册时不报错,说明pig发现jar文件没问题。

从咕噜声中逃跑

罐子的结构

META-INF
myudf
 +--UPPER.java
 +--IndexOfBig.java
 +--IndexOfBig.class
 +--pig.jar
 +--UPPER.class

【问题讨论】:

    标签: java apache-pig


    【解决方案1】:

    您的 jar 结构中没有包,您可以从脚本中添加或删除它。

    1- 添加包结构(这里不需要pig.jar):

    myudfs
      +-- UPPER.java
      +-- IndexOfBig.java
      +-- IndexOfBig.class
      +-- UPPER.class
    

    2- 或者从代码和脚本中删除它并保持 jar 原样:

    脚本

    b = foreach a generate UPPER($0);
    

    功能

    //package myudfs; // remove this line
    import java.io.IOException;
    import org.apache.pig.EvalFunc;
    import org.apache.pig.data.Tuple;
    
    public class UPPER extends EvalFunc<String>
    {
     ..
    

    如果 jar 在本地文件系统中:

    register /localpath/tad/pig/myudf.jar;
    

    如果它在 hdfs 中:

    register hdfs://namenode:port/tad/pig/myudf.jar;
    

    最后,根据您的构建工具,清单属性可能未设置为作为 pig udf 正常工作,为了摆脱这种情况,使用命令行轻松将您的 class 文件打包到 jar 文件中命令:

    jar cf myjar IndexOfBig.class UPPER.class
    

    【讨论】:

    • 我明白了。我将 jar 文件作为 myudf +-- .class 和 .java 文件。 myudf 与 META-INF 文件夹位于同一目录中。
    猜你喜欢
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多