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的更多相关文章

  1. 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. ...

  2. Hive 10、Hive的UDF、UDAF、UDTF

    Hive自定义函数包括三种UDF.UDAF.UDTF UDF(User-Defined-Function) 一进一出 UDAF(User- Defined Aggregation Funcation) ...

  3. hive中UDF、UDAF和UDTF使用

    Hive进行UDF开发十分简单,此处所说UDF为Temporary的function,所以需要hive版本在0.4.0以上才可以. 一.背景:Hive是基于Hadoop中的MapReduce,提供HQ ...

  4. hive下UDF函数的使用

    1.编写函数 [java] view plaincopyprint?package com.example.hive.udf;    import org.apache.hadoop.hive.ql. ...

  5. 在hive中UDF和UDAF使用说明

    Hive进行UDF开发十分简单,此处所说UDF为Temporary的function,所以需要hive版本在0.4.0以上才可以. 一.背景:Hive是基于Hadoop中的MapReduce,提供HQ ...

  6. 【转】hive中UDF、UDAF和UDTF使用

    原博文出自于: http://blog.csdn.net/liuj2511981/article/details/8523084 感谢! Hive进行UDF开发十分简单,此处所说UDF为Tempora ...

  7. hive的UDF读取配置文件

    hive的UDF读取配置文件 实现步骤 在读取配置文件的写为./file_name,然后在添加UDF的时候把配置文件也加入资源就好了: add jar xxx.jar; add file file_n ...

  8. 【Hive五】Hive函数UDF

    Hive函数 系统自带的函数 查看系统自带的函数 查看系统自带的函数 show functions; 显示自带的函数的用法 desc function upper; 详细显示自带的函数的用法 desc ...

  9. hive premanent udf 发布...

    起因: hive premanent udf 发布成功,但是hue 无法加载使用(但是cli 是可用的) ,处理半天,依然不可用!后来发现重启hiveserver2 就可以了     具体步骤如下:  ...

随机推荐

  1. keras中的模型保存和加载

    tensorflow中的模型常常是protobuf格式,这种格式既可以是二进制也可以是文本.keras模型保存和加载与tensorflow不同,keras中的模型保存和加载往往是保存成hdf5格式. ...

  2. js中的getBoundingClientRect()函数

    在Chrome上,此函数返回结果包含x,y,它们的取值对应于left,top.但是x,y这种表示方式非常不直观(需要先理解x轴和y轴的方向),而left,top则清晰无歧义地表达了元素的位置.正是因此 ...

  3. MATLAB 的break语句和continue语句

    break语句: MATLAB中 break 语句用于终止 for 或 while 循环的执行,当在循环体内执行到该语句的时候,程序将会跳出循环,继续执行循环语句的下一语句. %% MATLAB br ...

  4. HTTPS 指南

    苹果在 WWDC 2016 上宣布:2016 年底将要求所有 APP 适配苹果的 App Transport Security,简单地说就是除了特殊情况(浏览器.第三方服务.媒体)外,APP 跟服务端 ...

  5. 聊聊阻塞与非阻塞、同步与异步、I/O模型

    1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步/异步主要针对C端:  同步: 所谓同步,就是在c端 ...

  6. VS与SQL资源

    经常在网上看到有同学费尽心思的找SQL server数据库各版本的下载地址,看到别人的求助贴就不自觉的想去帮助他们,但是一个一个去帮助又不太现实,毕竟个人精力有限,既然大家有需求,那么笔者就本着乐于分 ...

  7. SQL Server 阻止了对组件 'Agent XPs' 的 过程 'dbo.sp_set_sqlagent_properties' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。

    Sqlserver 2008 在配置分发向导的时候报了如下错误: 使用 Agent XPs 选项可以启用此服务器上的 SQL Server 代理扩展存储过程.如果禁用此选项,则 SQL Server ...

  8. 【转】标准C++类std::string的内存共享和Copy-On-Write技术

    1.             概念 Scott Meyers在<More Effective C++>中举了个例子,不知你是否还记得?在你还在上学的时候,你的父母要你不要看电视,而去复习功 ...

  9. org.hibernate.exception.ConstraintViolationException: could not insert:

    org.hibernate.exception.ConstraintViolationException: could not insert: 报错原由于xxx.hbm.xml文件里的主键类型设置有问 ...

  10. Android工具类-关于网络、状态的工具类

    下方是一个很好的监测网络.状态的工具类 public class NetworkUtils { /** * 网络是否可用 * * @param activity * @return */ public ...