hadoop - 在 Hadoop 上使用 Apache-Pig 无法识别 JAR

标签 hadoop apache-pig hadoop2

我的目标是通过 pigeon 在我的 pig 脚本中使用空间功能。为了使用 pigeon-functions,我在开始时注册了三个 JAR(pigeon-0.2.1.jar、esri-geometry-api-1.2.1.jar 和 jts-1.8.jar),它们运行时没有错误和警告。 当我在 pig 命令行(grunt)中运行 pig 命令时,一切都很好(除了一些 deprication 警告,但引用其他帖子,这可以被忽略)但是一旦我想运行像 ST_MakePoint 这样的 pigeon 命令,就会出现错误:

ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1070: Could not resolve ST_MakePoint using imports: [, java.lang., org.apache.pig.builtin., org.apache.pig.impl.builtin.]

我正在使用:Ubuntu 14.04.4 LTS、Hadoop 2.7.1(单节点)、pig 0.15.0

关于如何解决这个问题有什么建议吗?

最佳答案

第一种方式:

Pig 中的调用语法:packagename.ClassName(arg0...)

来自 Github 的源代码:

    package edu.umn.cs.pigeon;

    import java.io.IOException;

    import org.apache.pig.EvalFunc;
    import org.apache.pig.data.DataByteArray;
    import org.apache.pig.data.Tuple;

    import com.esri.core.geometry.Point;
    import com.esri.core.geometry.SpatialReference;
    import com.esri.core.geometry.ogc.OGCPoint;

    /**
     * @author Ahmed Eldawy
     *
     */

    public class MakePoint extends EvalFunc<DataByteArray> {

      @Override
      public DataByteArray exec(Tuple input) throws IOException {
        if (input.size() != 2)
          throw new IOException("MakePoint takes two numerical arguments");
        double x = ESRIGeometryParser.parseDouble(input.get(0));
        double y = ESRIGeometryParser.parseDouble(input.get(1));
        Point point = new Point(x, y);
        OGCPoint ogc_point = new OGCPoint(point, SpatialReference.create(4326));
        return new DataByteArray(ogc_point.asBinary().array());
      }
    }

所以语法是

FOREACH points GENERATE edu.umn.cs.pigeon.MakePoint(X,Y)  

第二种方式: 使用简短的函数名称

为避免编写完整的函数名称(包+类名称),您可以使用“pigeon_import.pig”文件为所有函数创建一个短名称。您可以下载文件 here并将其放在您的 Pigeon 脚本旁边。要将此文件加载到脚本中,请将以下行发送到脚本的开头。 导入 'pigeon_import.pig'; 之后,您可以将信封函数写为 ST_MakePoint 而不是 edu.umn.cs.pigeon.MakePoint

Reference Blog

希望这有帮助!!!

关于hadoop - 在 Hadoop 上使用 Apache-Pig 无法识别 JAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38719435/

相关文章:

hadoop - 插入Hive表

hadoop - Apache Pig组/展平/加入

hadoop - 如何在架构定义期间指定ToDate?

hadoop - 运行具有高可用性的 Hadoop 集群的最低系统要求

hadoop - Hadoop Namenode 故障转移过程如何工作?

hadoop - 查找杀死 Hadoop 作业的用户名

hadoop - 无法使用Presto显示Hive Metastore中的表

regex - 配置对象配置单元表查询错误

java - Cloudera Hadoop VM 没有eclipse

hadoop - 如何在新的Hue 4 Pig Editor中设置参数