【开发案例】Hive案例:用户自定义函数

[复制链接]
发表于 : 2018-5-28 16:47:53 最新回复:2019-07-23 22:09:58
1821 2
lWX387225
lWX387225  新锐

Hive案例:用户自定义函数

1.1 场景说明

适用版本

FusionInsight HD V100R002C70FusionInsight HD V100R002C80

场景说明

Hive的内置函数不能满足需要时,可以通过编写用户自定义函数UDFUser-Defined Functions)插入自己的处理代码并在查询中使用它们。

按实现方式,UDF分如下分类:

l   普通的UDF,用于操作单个数据行,且产生一个数据行作为输出。

l   用户定义聚集函数UDAFUser-Defined Aggregating Functions),用于接受多个输入数据行,并产生一个输出数据行。

l   用户定义表生成函数UDTF(User-Defined Table-Generating Functions),用于操作单个输入行,产生多个输出行。

按使用方法,UDF有如下分类:

l   临时函数,只能在当前会话使用,重启会话后需要重新创建。

l   永久函数,可以在多个会话中使用,不需要每次创建。

下面以编写一个AddDoublesUDF为例,说明UDF的编写和使用方法:

1.2 开发思路

AddDoublesUDF主要用来对两个及多个浮点数进行相加。在该样例中可以掌握如何编写和使用UDF

说明

l  一个普通UDF必须继承自“org.apache.hadoop.hive.ql.exec.UDF”。

l  一个普通UDF必须至少实现一个evaluate()方法,evaluate函数支持重载。

1.3 样例代码说明

样例代码

以下为UDF示例代码:

package com.huawei.bigdata.hive.example.udf;
import org.apache.hadoop.hive.ql.exec.UDF;
 
public class AddDoublesUDF extends UDF { 
 public Double evaluate(Double... a) { 
    Double total = 0.0; 
    // 处理逻辑部分
    for (int i = 0; i < a.length; i++) 
      if (a[i] != null) 
        total += a[i]; 
    return total; 
  } 
}

如何使用

                                步骤 1      把以上程序打包成AddDoublesUDF.jar,并上传到HDFS指定目录下(如“/user/hive_examples_jars/)且创建函数的用户与使用函数的用户有该文件的可读权限。示例语句:

hdfs dfs -put ./hive_examples_jars /user/hive_examples_jars

hdfs dfs -chmod 777 /user/hive_examples_jars

                                步骤 2      需要使用一个具有admin权限的用户登录beeline客户端,执行如下命令:

kinit Hive业务用户

beeline

set role admin;

                                步骤 3      Hive Server中定义该函数,以下语句用于创建永久函数:

CREATE FUNCTION addDoubles AS 'com.huawei.bigdata.hive.example.udf.AddDoublesUDF' using jar 'hdfs://hacluster/user/hive_examples_jars/AddDoublesUDF.jar';

其中addDoubles是该函数的别名,用于SELECT查询中使用。

以下语句用于创建临时函数:

CREATE TEMPORARY FUNCTION addDoubles AS 'com.huawei.bigdata.hive.example.udf.AddDoublesUDF' using jar 'hdfs://hacluster/user/hive_examples_jars/AddDoublesUDF.jar';

l   addDoubles是该函数的别名,用于SELECT查询中使用。

l   关键字TEMPORARY说明该函数只在当前这个Hive Server的会话过程中定义使用。

                                步骤 4      Hive Server中使用该函数,执行SQL语句:

SELECT addDoubles(1,2,3);

说明

若重新连接客户端再使用函数出现[Error 10011]的错误,可执行reload function;命令后再使用该函数。

                                步骤 5      Hive Server中删除该函数,执行SQL语句:

DROP FUNCTION addDoubles;

----结束

1.4 样例代码获取

代码直接参考样例代码

 

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
  • x
  • 常规:

点评 回复

跳转到指定楼层
lWX387225
lWX387225  新锐 发表于 2018-5-29 09:34:33 已赞(0) 赞(0)

欢迎使用!
  • x
  • 常规:

点评 回复

最后的谜底
最后的谜底   发表于 2019-7-23 22:09:58 已赞(0) 赞(0)

刚好在项目中用到,谢谢啦
  • x
  • 常规:

点评 回复

发表回复
您需要登录后才可以回帖 登录 | 注册

警告 内容安全提示:尊敬的用户您好,为了保障您、社区及第三方的合法权益,请勿发布可能给各方带来法律风险的内容,包括但不限于政治敏感内容,涉黄赌毒内容,泄露、侵犯他人商业秘密的内容,侵犯他人商标、版本、专利等知识产权的内容,侵犯个人隐私的内容等。也请勿向他人共享您的账号及密码,通过您的账号执行的所有操作,将视同您本人的行为,由您本人承担操作后果。详情请参看“隐私声明
如果附件按钮无法使用,请将Adobe Flash Player 更新到最新版本!
登录参与交流分享

登录参与交流分享

登录