样条函数后续(java)--可在hive中执行的函数

之前写的样条插值算法只能在本地执行,但是我想要的是可在hive中执行的jar包,为了符合我的要求,经过痛苦、气愤、悲伤等一系列过程,终于实现了;

想要实现可在hive中执行的jar包,以下是具体步骤:

1。java程序的书写规范

样条函数后续(java)--可在hive中执行的函数

2.java程序如下所示,输入三个参数,x,y,key; x,y为ArrayList<string>格式列表,key为double型的数。返回double型的数;

 import java.util.ArrayList;
import org.apache.hadoop.hive.ql.exec.UDF; /**
* 样条插值法
* @author 91911
*/
public class SplineInterpolator extends UDF {
public double evaluate(ArrayList<String> x,ArrayList<String> y, double key) {
return new org.apache.commons.math3.analysis.interpolation.SplineInterpolator()
.interpolate(toArray(x),toArray(y))
.value(key);
} // String转Double
public double[] toArray(ArrayList<String> list) {
double[] array = new double[list.size()];
for(int i=0;i<list.size();i++){
array[i] = Double.valueOf(list.get(i));
}
return array;
}
}

3.将java包达成jar包

File>Export>JAR file>选择jar包路径>完成

选择jar包类型

样条函数后续(java)--可在hive中执行的函数

选择输出路径

样条函数后续(java)--可在hive中执行的函数

4.将打好的jar包上传至接口机(本地)

5.在hive上新建一个测试表

CREATE  TABLE `dim_ia_test_ysf1`(
  `x` array<string>,
  `y` array<string>)
ROW FORMAT DELIMITED
  FIELDS TERMINATED BY '|'
  COLLECTION ITEMS TERMINATED BY ','
STORED AS textfile;

将数据导入即可

6.测试jar包是否可用

先添加jar包,将java路径(函数)命名为ytf,再使用ytf函数;

add jar /data/all_ana_pro/yuanshufang/function/SplineInterpolatorImpl.jar;

create temporary function ytf as 'com.SplineInterpolatorImplNew';

set hive.limit.optimize.enable=true;

set hive.fetch.task.conversion=more;

select ytf(x,y,0.5) from dim_ia_test_ysf1;

说明:add jar部分为jar包路径;

ytf(x,y,z)—x,y为ArrayList<string>格式列表,z为double型数组,需要手动输入(因为新建的表只有x,y两列);

以上就是完整的过程,从写程序到jar包执行成功;

上一篇:Error "java.lang.NoClassDefFoundError:org/openxmlformats/schemas/spreadsheetml/x2006/main/CTExtensionList" in SoapUI


下一篇:python,中使用while...else 和 for...else 还有try...else,另外就是运用with关键字