hive扩展函数开发规范

提供以下两种实现方式:a继承org.apache.hadoop.hive.ql.exec.UDF类

代码包为:packageorg.apache.hadoop.hive.ql.udf

实现evaluate方法,根据输入参数和返回参数类型,系统自动转换到匹配的方法实现上。

例如:

•    UDFTestLength.java:

importorg.apache.hadoop.io.IntWritable;

importorg.apache.hadoop.io.Text;

public classUDFTestLength extends UDF {

IntWritable result = new IntWritable();

public IntWritable evaluate(Text s) {

if (s== null) {

return null;

}

result.set(countUDF8Characters(s));

return result;

}

}

b继承org.apache.hadoop.hive.ql.udf.generic.GenericUDF类

代码包为:packageorg.apache.hadoop.hive.ql.udf. generic

实现initialize ,evaluate,    getDisplayString方法

例如:

@Description(name = "url_to_map", value = "_FUNC_(text,delimiter1, delimiter2) - "

public class GenericUDFUrlToMap extends GenericUDF{

HashMap<Object,Object> ret = new HashMap<Object, Object>();

@Override

public ObjectInspector initialize(ObjectInspector[]arguments)

throwsUDFArgumentException {

… …

returnObjectInspectorFactory.getStandardMapObjectInspector(

PrimitiveObjectInspectorFactory.javaStringObjectInspector,

PrimitiveObjectInspectorFactory.javaStringObjectInspector);

}

@Override

public Object evaluate(DeferredObject[]arguments) throws HiveException {

ret.clear();

… …

return ret;

}

@Override

public String getDisplayString(String[]children) {

StringBuildersb = new StringBuilder();

sb.append("url_to_map(");

assert (children.length <= 3);

boolean firstChild = true;

for (String child :children) {

if (firstChild) {

firstChild= false;

}else {

sb.append(",");

}

sb.append(child);

}

sb.append(")");

return sb.toString();

}

}

扩展函数写完后需要统一注册到FunctionRegistry中,发布后成为系统函数;

扫一扫超人学院微信二维码

时间: 2024-10-12 19:29:46

hive扩展函数开发规范的相关文章

Sqoop 脚本开发规范(实例手把手带你写sqoop export和sqoop import)

首先,先明确,为什么Sqoop需要规范的脚本开发呢? 答:是因为,Sqoop import HDFS/Hive/HBase这些都是手动.但是在实际生产里,有时候,需要用脚本来完成. 比如,通过shell脚本来操作对Sqoop.Hive.HBase.MapReduce.HDFS.Spark.Storm等各种. Sqoop 脚本开发规范 目录规范 1.目录结构体系 /home/hadoop(开发用户)/app/djt(数据来源.业务)/sh/sqoop 示例:/home/hadoop/app/djt

谈谈Google与微信H5牛牛的Java开发规范

多年前,Google发布微信H5牛牛搭建平台(h5.fanshubbs.com)来定义Java编码时应遵循的微信牛牛Q_1687054422规范:今年年初阿里则发布阿里巴巴Java 开发手册,并随后迭代了多个版本,直至9月份又发布了微信H5牛牛.这两大互联网巨头的初衷,都是希望能够统一标准,使业界编码达到一致性,提升沟通和研发效率,这对于我们码农无疑是很赞的一笔福利呀.笔者将两份规范都通读了一遍,其中列举的不少细则跟平时的编码习惯基本是符合的,不过还是有不少新奇的收获,忍不住记录在此,供日后念念

web前端开发规范

本文原创,这里首先声明,转载注明本文出处,翻版必究! web前端开发规范的现实意义 1.提高团队的协作能力 2.提高代码的重复利用率 3.可以写出质量更高,效率更好的代码 4.为后期维护提供更好的支持 5.可读性高 一.命名规则 1.html命名规则: a.文件名称命名规则:统一使用小写英文字母.数字.下划线的组合,不得包含汉字空格和特殊字符 2.命名原则:方便理解.方便查找 b.索引文件命名原则:index.html.index.htm.index.asp.index.aspx.index.j

C#语言开发规范-ching版

学习C#之初,始终不知道怎么命名比较好,很多时候无从命名,终于有一天我整理了一份命名规范文档,自此我就是按照这个命名规范书写代码,整洁度无可言表,拙劣之处请大家斧正,愚某虚心接受,如有雷同,不胜荣幸 C#语言开发规范 作者ching 1.  命名规范 a) 类 [规则1-1]使用Pascal规则命名类名,即首字母要大写. eg: Class Test { ... } [规则1-2]使用能够反映类功能的名词或名词短语命名类. [规则1-3]不要使用“I”.“C”.“_”等特定含义前缀. [规则1-

Web前端开发规范文档(google规范)

(Xee:其实没什么规范约束,但是养成一种好习惯,何乐而不为?) 我推荐去看看google的开发规范,然后从他的当中去总结自己的开发规范. Google HTML/CSS代码风格指南 Google JavaScript 编码规范指南 ------------------------------------------------------------------------------------------------------------------------------- 绝大多数项

麦子新课上线之web前端开发规范

同学们,Web前端开发又有课程上线啦!对Web前端感兴趣的同学们,速来围观哦~~下面简单介绍一下课程. [学霸学新,课快人一步] 课程简介: Web前端开发规范,可以帮助同学们,了解web前端开发规范的意义,掌握前端开发中的开发规范,掌握web前端开发中的实用技巧.面对企业团队开发,可以很快融入团队合作中,高效率的完成团队给予的任务. 课程地址→http://www.maiziedu.com/course/web/621-8960/ 老师简介: 何虎:8年软件开发经验,擅长互联网应用程序开发,曾

shell开发规范

版本1.0版,参考网上的一些文章规整而来.后期打算继续修改.完成一篇适合自己的shell开发规范. 最新编辑时间:2017.6.25 一. 命名规范 1. 版本和运行参数 1) 脚本开始之前以注释形式说明版本号:(推荐)2) 如果调用其他工具,还需说明工具的版本号:(推荐)3) 为脚本添加必须的运行参数,类似于C程序的运行参数,可使用getopt的方式取得运行参数值,如基本的参数有:-v - 版本号:-h – 帮助信息:(推荐) 2. 变量命名 1) 变量命名要前后统一,建议使用全部大写字母,如

软甲开发规范

软件开发规范:获得本目录的绝对路径sys.payh.abspath(__file__)获得本级目录的父目录sys.payh.dirname(sys.payh.abspath(__file__)) 软件名 bin #可执行文件  start.py#调用core下面的main代码启动软件 core#主代码  main.py#调用数据库的配置文件存放处 conf#配置文件中可以导入数据库文件  setting.py db#数据库文件  db.json docs#软件文档  一些文档 lib#库文件,就

我的开发规范

转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6413978.html 每个开发人员在长久的开发生涯中,都会养成自己的一套开发风格,或者说,规范.之后在开发项目时都会下意识地遵循着心中的规范去设计.开发项目.这种开发风格随着经验和能力的增加会不断修改.演变,由幼稚走向成熟.我只是个刚开启开发之旅的小菜鸟,在此记录下我的开发规范,以便日后不断修正.进步. 1:项目架构与设计 分6层:View层编写前端页面,Control层处理view层请求(包括各servl