带有semanticexception的配置单元udf[错误10014]

qxgroojn  于 2021-06-02  发布在  Hadoop
关注(0)|答案(0)|浏览(241)

最近正在为配置单元上的哈希几何点编写自定义项。在这个自定义项中,我导入com.livertsolutions.jts.geom。
代码如下:,

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.apache.hadoop.hive.ql.exec.UDF;

import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.Point;
import com.vividsolutions.jts.geom.Polygon;

public class tenthudf extends UDF{
    public String evaluate (String pointstr,Integer level){

        int sindex=pointstr.indexOf('(');
        int eindex=pointstr.indexOf(')');

        String[] temps=(pointstr.substring(sindex+1,eindex)).split(" ");
        double lon=Double.parseDouble(temps[0]);
        double lat=Double.parseDouble(temps[1]);

        GeometryFactory geometryFactory = new GeometryFactory();

        GeoHashGeometry gg=new GeoHashGeometry(level);

        Coordinate coord = new Coordinate(lon,lat);
        Point point = geometryFactory.createPoint(coord);

        return gg.encodePoint(point);
    }
}

代码在我的eclipse上运行,但是当我上传并在hive中注册它时。然后我用它作为:

SELECT tenthhh('POINT (103.95651 31.32475)',8)

错误如下:
编译语句时出错:失败:semanticexception[error 10014]:行1:7错误的参数“8”:org.apache.hadoop.hive.ql.metadata.hivexception:无法执行方法public java.lang.string com.zebra.drivingbehavior.tenthudf.evaluate(java.lang.string,对象com.zebra.drivingbehavior上的。tenthudf@3000f271 类com.zebra.drivingbehavior.tenthudf的参数{point(103.95651 31.32475):java.lang.string,8:java.lang.integer},大小为2
我发现最小函数是:

public String evaluate (String pointstr,Integer level){

        int sindex=pointstr.indexOf('(');
        int eindex=pointstr.indexOf(')');

        String[] temps=(pointstr.substring(sindex+1,eindex)).split(" ");
        double lon=Double.parseDouble(temps[0]);
        double lat=Double.parseDouble(temps[1]);

        //GeometryFactory geometryFactory = new GeometryFactory();

        //GeoHashGeometry gg=new GeoHashGeometry(level);

        //Coordinate coord = new Coordinate(lon,lat);
        //Point point = geometryFactory.createPoint(coord);

        //return gg.encodePoint(point);
        return pointstr+" "+level.toString()+" "+String.valueOf(lon)+" "+String.valueOf(lat);
    }

所以我几乎可以肯定,当我使用外部库jar时会出现问题。我使用maven程序集插件打包jar文件,并检查依赖jar是否存在。
我搜索了堆栈溢出,发现了两个类似的问题,但都没有得到有用的答案。。。
hive给出semanticexception[error 10014]:在运行我的udf时
带有外部库的hadoop hive udf

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题