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. (原)ubuntu中安装kate

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6339642.html 参考网址: https://kate-editor.org/build-it/# ...

  2. Mac系统清理、占用空间大、空间不够、查看系统文件大小分布

    背景: 最近老提示空间不够,很尴尬,一直弹系统提示 如图,256的空间,就剩下几个G了,其中最大头的系统占用:160G,占比60%多 正常情况下:我们可以点击管理,进入到系统磁盘优化界面: 这种适用于 ...

  3. hql语句的case when then else end问题

    http://www.iteye.com/problems/4499 hibernate count不支持case when?

  4. Apache+PHP配置PATHINFO的一个小问题

    使用ThinkPHP示例,设置'URL_MODEL'                 =>  2,发现提示: No input file specified 应该是PATHINFO配置的问题,试 ...

  5. iOS 开发 Pch 文件的正确使用

    在Xcode6之前,创建一个新工程xcode会在Supporting files文件夹下面自动创建一个“工程名-Prefix.pch”文件,也是一个头文件,pch头文件的内容能被项目中的其他所有源文件 ...

  6. 联想Thinkpad笔记本自带win10改win7图文教程

    一.准备工作: 1.备份转移硬盘所有文件 2.改装win7将删除所有分区,要恢复预装的win10系统需到售后 3.4G空间以上U盘,制作U盘PE启动盘 4.操作系统:联想Lenovo笔记本专用GHOS ...

  7. PHP通过soap调用c#的WebService

    1:C# Contact public class Contact { private int _Id; private string _Name; public int id { get { ret ...

  8. 【javascript】js实现复制、粘贴

    使用document.ExecCommand("copy")命令,官方文档,点我. 例如: <!DOCTYPE html> <html> <head& ...

  9. <welcome-file>index.action</welcome-file>直接设置action,404和struts2中的解决方案

    这几天的项目页面的访问全部改为.action访问,在修改首页时遇到了问题.将web.xml文件中<welcome-file>index.action</welcome-file> ...

  10. 解决虚拟机vmware虚拟机安装64位系统“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”的问题

    前言 虚拟机使用的是VMware Workstation,并且首次在虚拟机体验64 位系统.在新建好虚拟机,运行时候就出现了VMware Workstation 的提醒:此主机支持 Intel VT- ...