最近为HIVE上的哈希几何点编写了一个UDF。 在这个udf我输入 com.vividsolutions.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);
}
}
代码在我的日食上运行,但是当我上传并在HIVE中注册时。 然后我用它作为:
SELECT tenthhh('POINT (103.95651 31.32475)',8)
错误如下:
编译语句时出错:FAILED:SemanticException [错误10014]:第1行:7错误的参数' 8': org.apache.hadoop.hive.ql.metadata.HiveException:无法执行 方法public java.lang.String com.zebra.drivingbehavior.tenthudf.evaluate(java.lang.String中,java.lang.Integer中) 在课堂上的com.zebra.drivingbehavior.tenthudf@3000f271 带参数的com.zebra.drivingbehavior.tenthudf {POINT(103.95651 31.32475):java.lang.String,8:java.lang.Integer},大小为2
我创建了min函数的工作原理是:
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 gives SemanticException [Error 10014]: when Running my UDF