美文网首页我爱编程
Hive自定义UDF函数

Hive自定义UDF函数

作者: IT_小白 | 来源:发表于2018-07-25 15:26 被阅读0次

你要写的查询有事无法轻松或是(无法完成)的查询任务,使用Hive内置函数来标识。

通过编写用户自定义函数(user-defind function,UDF),Hive可以方便地插入用户写的处理代码并在查询中调用他们。

UDF支持的编程语言:Java(只支持Java)

Hive本身也是Java编写的。对于其他编程语言,可以考虑使用SELECT TRANSFORM 查询,

有了它,可以让数据流经用户自定义的脚本。

Hive中有三种UDF:(普通)UDF、用户定义聚集函数(user-defind aggregate function,UDAF)

以及用户自定义表生成函数(user-defind generating function,UDTF)。

自定义UDF函数 去除字符串尾字符的UDF:

package com.ht.hive;

import org.apache.commons.lang.StringUtils;

import org.apache.hadoop.hive.ql.exec.UDF;

import org.apache.hadoop.io.Text;

/**

* Created by MAIBENBEN on 2018/7/5.

*/

public class Stripextends UDF {

public static void main(String[] args) {

Strip hive =new Strip();

Text evaluate = hive.evaluate(new Text("asd"),"sd");

System.out.println(evaluate.toString());

}

private Textresult =new Text();

public Text evaluate(Text str) {

if (null == str) {

return null;

}

result.set(StringUtils.strip(str.toString()));

return result;

}

public Text evaluate(Text str, String stripChars) {

if (null == str) {

return null;

}

result.set(StringUtils.strip(str.toString(), stripChars));

return result;

}

}

一个UDF函数必须满足下面两个条件:

            1、一个UDF必须是    org.apache.hadoop.hive.ql.exec.UDF 的子类

            2、 一个必须;至少实现了evaluate() 方法

evaluate方法不是接口定义的,Hive会检查UDF,看是否能找到相匹配的evaluate方法。

计算一组整数中最大的UDAF

package com.ht.hive;

import org.apache.hadoop.hive.ql.exec.UDAF;

import org.apache.hadoop.hive.ql.exec.UDAFEvaluator;

import org.apache.hadoop.io.IntWritable;

/**

* Created by MAIBENBEN on 2018/7/6.

*/

public class Maximumextends UDAF {

public static class MaximumIntUDAFEaluatorimplements UDAFEvaluator {

private IntWritableresult;

@Override

        public void init() {

result =null;

}

public boolean iterate(IntWritable value) {

if (null == value) {

return true;

}else {

result.set(Math.max(result.get(), value.get()));

}

return true;

}

public IntWritable terminatePartial() {

return result;

}

public boolean merge(IntWritable other) {

return iterate(other);

}

public IntWritable terminate() {

return result;

}

}

}

一个UDAF函数必须满足以下条件条件:

一个UDAF必须是    org.apache.hadoop.hive.ql.exec.UDAF 的子类,并且包含一个或多个嵌套

的、实现了    org.apache.hadoop.hive.ql.exec.UDAFEvaluator 的静态类。

相关文章

  • Hive从入门到精通8:Hive自定义函数(UDF)

    1.什么是Hive UDF? Hive中的用户自定义函数(即User Defined Function,简称UDF...

  • Hive- UDF&GenericUDF

    hive udf简介 在Hive中,用户可以自定义一些函数,用于扩展HiveQL的功能,而这类函数叫做UDF(用户...

  • 【Hive】Hive UDF

    [TOC] 一、UDF 介绍 UDF(User-Defined Functions)即是用户自定义的hive函数。...

  • Hive 用户自定义函数 UDF,UDAF

    Hive有UDF:(普通)UDF,用户自定义聚合函数(UDAF)以及用户自定义生表函数(UDTF)。它们所接受的输...

  • Hive的UDF编程-GenericUDF编程

    UDF简介 在Hive中,用户可以自定义一些函数,用于扩展HiveQL的功能,而这类函数叫做UDF(用户自定义函数...

  • Hive开发自定义函数UDF

    Hive 内置函数 Hive自定义函数 UDF(User-Defined-Function) 一进一出 UDAF(...

  • 学习中的关键的问题

    hive中的topn操作需要使用到hive的窗口函数执行操作的。 spark的udf可以实现自定义的udf的函数的...

  • Hive 自定义函数 UDF

    Hive 自定义函数 UDF UDF:用户定义(普通)函数,只对单行数值产生作用; UDF只能实现一进一出的操作。

  • hive积累大全

    此篇内容:hive自定义函数UDF、UDTF,压缩存储方式,hive优化、hive实际编程SQL中的if表达式用法...

  • Hive的UDF函数

    【前言】常见的数据库都有函数,hive自身也有函数。分为内置函数和自定义的UDF函数,自定义函数例如(sum 、c...

网友评论

    本文标题:Hive自定义UDF函数

    本文链接:https://www.haomeiwen.com/subject/vxdbuftx.html