hive添加UDF
hive添加UDF
步骤如下:
函数分为永久和临时函数,后者会话退出则消失,前者不会
查看已有函数(创建好后也可以通过这个来查看是否成功)
show functions;
- 写UDF的java文件,如:
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hadoop.hive.ql.udf;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.hive.serde2.ByteStream;
import org.apache.hadoop.hive.serde2.io.ByteWritable;
import org.apache.hadoop.hive.serde2.io.DoubleWritable;
import org.apache.hadoop.hive.serde2.io.ShortWritable;
import org.apache.hadoop.hive.serde2.io.TimestampWritable;
import org.apache.hadoop.hive.serde2.lazy.LazyInteger;
import org.apache.hadoop.hive.serde2.lazy.LazyLong;
import org.apache.hadoop.io.BooleanWritable;
import org.apache.hadoop.io.BytesWritable;
import org.apache.hadoop.io.FloatWritable;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
/**
* UDFToString.
*
*/
public class UDFToString extends UDF {
private final Text t = new Text();
private final ByteStream.Output out = new ByteStream.Output();
public UDFToString() {
}
public Text evaluate(NullWritable i) {
return null;
}
private final byte[] trueBytes = {'T', 'R', 'U', 'E'};
private final byte[] falseBytes = {'F', 'A', 'L', 'S', 'E'};
public Text evaluate(BooleanWritable i) {
if (i == null) {
return null;
} else {
t.clear();
t.set(i.get() ? trueBytes : falseBytes);
return t;
}
}
public Text evaluate(ByteWritable i) {
if (i == null) {
return null;
} else {
out.reset();
LazyInteger.writeUTF8NoException(out, i.get());
t.set(out.getData(), 0, out.getCount());
return t;
}
}
public Text evaluate(ShortWritable i) {
if (i == null) {
return null;
} else {
out.reset();
LazyInteger.writeUTF8NoException(out, i.get());
t.set(out.getData(), 0, out.getCount());
return t;
}
}
public Text evaluate(IntWritable i) {
if (i == null) {
return null;
} else {
out.reset();
LazyInteger.writeUTF8NoException(out, i.get());
t.set(out.getData(), 0, out.getCount());
return t;
}
}
public Text evaluate(LongWritable i) {
if (i == null) {
return null;
} else {
out.reset();
LazyLong.writeUTF8NoException(out, i.get());
t.set(out.getData(), 0, out.getCount());
return t;
}
}
public Text evaluate(FloatWritable i) {
if (i == null) {
return null;
} else {
t.set(i.toString());
return t;
}
}
public Text evaluate(DoubleWritable i) {
if (i == null) {
return null;
} else {
t.set(i.toString());
return t;
}
}
public Text evaluate(Text i) {
if (i == null) {
return null;
}
i.set(i.toString());
return i;
}
public Text evaluate(TimestampWritable i) {
if (i == null) {
return null;
} else {
t.set(i.toString());
return t;
}
}
public Text evaluate (BytesWritable bw) {
if (null == bw) {
return null;
}
t.set(bw.getBytes(),0,bw.getLength());
return t;
}
}
- 将写好的java文件打包成jar:
jar cvf UDFUpper.jar -c bin UDFUpper.java
- 进入hive,添加jar文件
hive> add jar UDFToString.jar;
Added [UDFToString.jar] to class path
Added resources: [UDFToString.jar]
添加临时函数(会话结束函数消失)
进入hive,添加jar文件
hive> add jar UDFToString.jar;
Added [UDFToString.jar] to class path
Added resources: [UDFToString.jar]
添加函数(注意class所在包)
语法为:
CREATE TEMPORARY FUNCTION function_name AS class_name;
hive> create temporary function mytest as 'org.apache.hadoop.hive.ql.udf.UDFToString';
OK
Time taken: 0.009 seconds
路径出错会提示:
FAILED: Class default.udf.Upper not found
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.FunctionTask
具体类路径为UDF java文件里的package+'.'+java文件名
删除临时函数
DROP TEMPORARY FUNCTION [IF EXISTS] function_name;
添加永久函数
添加
语法:
CREATE FUNCTION [db_name.]function_name AS class_name
[USING JAR|FILE|ARCHIVE 'file_uri' [, JAR|FILE|ARCHIVE 'file_uri'] ];
注意:
如果hive非本地模式运行,则后面应该是为非本地文件等URI,如hdfs路径,否则会报错;
例子:
hive> create function default.hah as "org.apache.hadoop.hive.ql.udf.UDFToString" using jar "UDFToString.jar";
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.FunctionTask. Hive warehouse is non-local, but UDFToString.jar specifies file on local filesystem. Resources on non-local warehouse should specify a non-local scheme/path
hive> create function default.hah as "org.apache.hadoop.hive.ql.udf.UDFToString" using jar "hdfs:///hdfs_home/UDFToString.jar";
converting to local hdfs:///hdfs_home/UDFToString.jar
Added [/tmp/fda83e6d-e1af-4005-affa-9f9c4ee226a6_resources/UDFToString.jar] to class path
Added resources: [hdfs:///hdfs_home/UDFToString.jar]
OK
Time taken: 0.521 seconds
删除
DROP FUNCTION [IF EXISTS] function_name;
引用第三方包的情况
假如在你的UDF文件里引用了第三方包,那么只需要在生成jar文件的时候改变一下命令就可以了,如下:
javac -classpath hive-0.4.1.jar:commons-io-2.5.jar:bcprov-jdk15on-158.jar com/example/hive/udf/UDFDecrypt.java
jar -cvf UDFDecrypt.jar ./com/example/hive/udf/UDFDecrypt.class
上面javac命令中classpath跟的是用到的第三方包名,使用:做间隔,后面跟的是java文件路径
此处参考了这里
参考
hive添加UDF的更多相关文章
- hive 添加UDF(user define function) hive的insert语句
add JAR /home/hadoop/study/study2/utf.jar; package my.bigdata.udf; import org.apache.hadoop.hive.ql. ...
- Hive 10、Hive的UDF、UDAF、UDTF
Hive自定义函数包括三种UDF.UDAF.UDTF UDF(User-Defined-Function) 一进一出 UDAF(User- Defined Aggregation Funcation) ...
- hive中UDF、UDAF和UDTF使用
Hive进行UDF开发十分简单,此处所说UDF为Temporary的function,所以需要hive版本在0.4.0以上才可以. 一.背景:Hive是基于Hadoop中的MapReduce,提供HQ ...
- hive下UDF函数的使用
1.编写函数 [java] view plaincopyprint?package com.example.hive.udf; import org.apache.hadoop.hive.ql. ...
- 在hive中UDF和UDAF使用说明
Hive进行UDF开发十分简单,此处所说UDF为Temporary的function,所以需要hive版本在0.4.0以上才可以. 一.背景:Hive是基于Hadoop中的MapReduce,提供HQ ...
- 【转】hive中UDF、UDAF和UDTF使用
原博文出自于: http://blog.csdn.net/liuj2511981/article/details/8523084 感谢! Hive进行UDF开发十分简单,此处所说UDF为Tempora ...
- hive的UDF读取配置文件
hive的UDF读取配置文件 实现步骤 在读取配置文件的写为./file_name,然后在添加UDF的时候把配置文件也加入资源就好了: add jar xxx.jar; add file file_n ...
- 【Hive五】Hive函数UDF
Hive函数 系统自带的函数 查看系统自带的函数 查看系统自带的函数 show functions; 显示自带的函数的用法 desc function upper; 详细显示自带的函数的用法 desc ...
- hive premanent udf 发布...
起因: hive premanent udf 发布成功,但是hue 无法加载使用(但是cli 是可用的) ,处理半天,依然不可用!后来发现重启hiveserver2 就可以了 具体步骤如下: ...
随机推荐
- 听听各位对Ubuntu的UI的看法
2012-7-15 15:46 最近升级到Ubuntu 12.4 .发现其界面效果真的时越来越炫啦.我就在想,你Ubuntu你图什么啊, 你是以个Linux系统,你的重点在于让系统运行更稳定,更 ...
- 对Java的常用对象(POJO、DTO、PO、BO、VO、DAO)详细解释及应用场景
首先这些对象都应用都是一些单词的简称,也是一种应用思想,故其他语言也可以使用,在Java里比较常见这些对象吧.下面来一一解释. 一.POJO(Plain Ordinary Java Object). ...
- sql server @@ROWCOUNT 会被 if 给 清 0
官方说 @@ROWCOUNT 会被以下几种语句清0 原文如下: Statements such as USE, SET <option>, DEALLOCATE CURSOR, CLOS ...
- 双链表实现Queue
算法导论第10章的东西,感觉用双链表真心简单,就是有点浪费空间,但是时间复杂度O(1): #include <stdio.h> struct LinkNode { LinkNode(): ...
- 简单解决XP共享连接数10限制(转)
1.建立一个txt文件,在里面输入以下文字:net session /delete /y,并将其保存为clear session.bat文件.net session用于查看本机共享的会话详细情况,可以 ...
- System.net.mail 腾讯ssl发送邮件超时
我采用了.net 的自带组件 System.Web.Mail.MailMessage发送邮件,主要是在客户注册网站成功的时候发条欢迎邮件,最近邮件无法发送了,看了下腾讯smtp邮件配置,所有的邮件发送 ...
- MS SQL Server查询优化方法 查询速度慢的原因很多,常见如下几种
1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大 ...
- top 学习
通常top命令是会持续运行而不终止的. 要在脚本里用,需要添加一些选项参数,尤其是-b.例如:top -b -n 2 -d 3 >/tmp/log -b表示批处理模式(Batch mode),以 ...
- 构建你的长寿命的API第1部分:规范驱动的API开发
构建你的长寿命的API第1部分:规范驱动的API开发 这篇文章是由MuleSoft的Mike Stowe在nginx.conf 2016公布的演示文稿改编的.第一部分重点是规范驱动的API开发. 第二 ...
- asp.net中C#中计算时间差代码
我用的最简单的办法是 代码如下 复制代码 DateTime dtone = Convert.ToDateTime("2007-1-1 05:32:22");DateTime dtw ...