自己写代码时候的利用到的模板
UDF步骤:
1.必须继承org.apache.hadoop.hive.ql.exec.UDF
2.必须实现evaluate函数,evaluate函数支持重载
package com.alibaba.hive.udf;
import org.apache.hadoop.hive.ql.exec.UDF
public class helloword extends UDF{
public String evaluate(){
return "hello world!";
}
public String evaluate(String str){
return "hello world: " + str;
}
}
UDAF步骤:
1.必须继承
org.apache.hadoop.hive.ql.exec.UDAF(函数类继承)
org.apache.hadoop.hive.ql.exec.UDAFEvaluator(内部类Evaluator实现UDAFEvaluator接口)
2.Evaluator需要实现 init、iterate、terminatePartial、merge、terminate这几个函数
init():类似于构造函数,用于UDAF的初始化
iterate():接收传入的参数,并进行内部的轮转。其返回类型为boolean
terminatePartial():无参数,其为iterate函数轮转结束后,返回乱转数据,iterate和terminatePartial类似于hadoop的Combiner(iterate--mapper;terminatePartial--reducer)
merge():接收terminatePartial的返回结果,进行数据merge操作,其返回类型为boolean
terminate():返回最终的聚集函数结果
package com.alibaba.hive;
import org.apache.hadoop.hive.ql.exec.UDAF;
import org.apache.hadoop.hive.ql.exec.UDAFEvaluator;
public class myAVG extends UDAF{
public static class avgScore{
private long pSum;
private double pCount;
}
public static class AvgEvaluator extends UDAFEvaluator{
avgScore score;
public AvgEvaluator(){
score = new avgScore();
init();
}
/*
*init函数类似于构造函数,用于UDAF的初始化
*/
public void init(){
score.pSum = 0;
score.pCount = 0;
}
/*
*iterate接收传入的参数,并进行内部的轮转。其返回类型为boolean
*类似Combiner中的mapper
*/
public boolean iterate(Double in){
if(in != null){
score.pSum += in;
score.pCount ++;
}
return true;
}
/*
*terminatePartial无参数,其为iterate函数轮转结束后,返回轮转数据
*类似Combiner中的reducer
*/
public avgScore terminatePartial(){
return score.pCount == 0 ? null : score;
}
/*
*merge接收terminatePartial的返回结果,进行数据merge操作,其返回类型为boolean
*/
public boolean merge(avgScore in){
if(in != null){
score.pSum += in.pSum;
score.pCount += in.pCount;
}
return true;
}
/*
*terminate返回最终的聚集函数结果
*/
public Double terminate(){
return score.pCount == 0 ? null : Double.valueof(score.pSum/score.pCount);
}
}
}
UDTF步骤:
1.必须继承org.apache.hadoop.hive.ql.udf.generic.GenericUDTF
2.实现initialize, process, close三个方法
3.UDTF首先会
a.调用initialize方法,此方法返回UDTF的返回行的信息(返回个数,类型)
b.初始化完成后,会调用process方法,对传入的参数进行处理,可以通过forword()方法把结果返回
c.最后close()方法调用,对需要清理的方法进行清理
public class GenericUDTFExplode extends GenericUDTF {
private ListObjectInspector listOI = null;
@Override
public void close() throws HiveException {
}
@Override
public StructObjectInspector initialize(ObjectInspector[] args) throws UDFArgumentException {
if (args.length != 1) {
throw new UDFArgumentException("explode() takes only one argument");
}
if (args[0].getCategory() != ObjectInspector.Category.LIST) {
throw new UDFArgumentException("explode() takes an array as a parameter");
}
listOI = (ListObjectInspector) args[0];
ArrayList<String> fieldNames = new ArrayList<String>();
ArrayList<ObjectInspector> fieldOIs = new ArrayList<ObjectInspector>();
fieldNames.add("col");
fieldOIs.add(listOI.getListElementObjectInspector());
return ObjectInspectorFactory.getStandardStructObjectInspector(fieldNames,
fieldOIs);
}
private final Object[] forwardObj = new Object[1];
@Override
public void process(Object[] o) throws HiveException {
List<?> list = listOI.getList(o[0]);
if(list == null) {
return;
}
for (Object r : list) {
forwardObj[0] = r;
forward(forwardObj);
}
}
@Override
public String toString() {
return "explode";
}
}
分享到:
相关推荐
Spark Hive UDF示例 建立项目 mvn clean package 将spark-hive-udf-1.0.0-SNAPSHOT.jar复制到边缘节点临时目录 spark-hive-udf]# cp target/spark-hive-udf-1.0.0-SNAPSHOT.jar /tmp 通过提供罐子来启动火花壳 spark...
Hive UDF 项目 介绍 该项目只是一个示例,包含多个 (UDF),用于 Apache Spark。 它旨在演示如何在 Scala 或 Java 中构建 Hive UDF 并在 . 为什么要使用 Hive UDF? Hive UDF 的一个特别好的用途是与 Python 和 ...
hive编写 udf 至少需要引入的jar包:hive-exec-xxx.jar 和 hadoop-core-xxx.jar
这是一些有用的 Hive UDF 和 UDAF 的集合。 提供的功能 UDAF Mode ( de.frosner.hive.udaf.Mode ) - 计算组列的统计模式 从源头构建 git clone https://github.com/FRosner/mustached-hive-udfs.git cd mustached...
Hive UDF 说明书,官方指定文档。Hive_LanguageManual_UDF
主要介绍了大数据 java hive udf函数(手机号码脱敏),的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
大数据的hive资源的详细代码设计以及分享,望博友相互交流
=================适用于Apache Hive的DataSketches Java UDF / UDAF适配器请访问主要的以获取更多信息。 如果您有兴趣对此站点做出贡献,请参阅我们的页面以了解如何与我们联系。Hadoop Hive UDF / UDAF 请参阅Java...
$ ant -Dhive.install.dir=../hive/build/dist clean package 使用Hive PDK运行测试 $ ant -Dhive.install.dir=../hive/build/dist test 安装和配置 hive-site.xml <name>hive.aux.jars.path</name> <value>...
hive的udf函数实现
hive udaf 实现按位取与或 hive udaf 实现按位取与或 hive udaf 实现按位取与或
Hadoop [3] is a popular open-source map-reduce im- plementation which is being used as an alternative to store and process extremely large data sets on commodity hard- ware. However, the map-reduce ...
udf开发–做个简单脱敏udf保留前5位,后面全部替换成*****
通用hive udf 源码,想要开发hadoop hive 的开发者 可以下载试看
详细介绍如何开发hive自定义永久函数,配套有测试数据
地址转换成经纬度+两地址间距离计算+省市区位置解析(Java代码) Hive自定义函数的封装
Hive UDF UDF 聚合 UDF Finds MIN, MAX and SUM from array of Struct Objects based on a field. 排序 UDF Returns sorted array of Struct objects for an array of Struct Objects based on a field. 日期 ...
赵伟首先介绍了他们的TDW核心架构,HIVE,MapReduce,HDFS及PostgreSQL构成。赵伟分享了最核心的HIVE模块在TDW中的实践经验;HIVE是一个在Hadoop上构建数据仓库的软件,它...实现了基本的SQL功能,可扩充UDF/UDAF...
hive所有函数 包括UDTs、UDAF、UDTF函数和运算符等,中文汉化,翻译并测试
hiveUDF-1.0-SNAPSHOT.jar