iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么编写UDF函数
  • 780
分享到

怎么编写UDF函数

2023-06-02 12:06:03 780人浏览 八月长安
摘要

本篇内容主要讲解“怎么编写UDF函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么编写UDF函数”吧!1.为什么需要UDF?1)、因为内部函数没法满足需求。2)、Hive它本身就是一个灵活框

本篇内容主要讲解“怎么编写UDF函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么编写UDF函数”吧!

1.为什么需要UDF?

1)、因为内部函数没法满足需求。

2)、Hive它本身就是一个灵活框架,允许用自定义模块功能,如可以自定义UDF、serde、输入输出等。

UDF是什么?

UDF:user difine function,用户自定义函数,一对一。常用 udaf:user define aggregate function,用户自定义聚合函数,多对一。 udtf:user define table_generate function,用户自定义表生成函数,一对多。

怎么编写UDF函数??

1)、该类需要继承UDF,重写evaluate(),允许该方法重载。

2)、也可以继承 generic UDF,需要重写 initliaze() 、 getDisplay() 、 evaluate()

UDF的使用

第一种:(当前session有效)

package edu.qianfeng.UDF;import org.apache.hadoop.hive.ql.exec.UDF;public class FirstUDF extends UDF{ //重写evaluate() public String evaluate(String str){  //判断  if(str == null){   return null;  }  return str+"_class"; }}

添加自定UDF的jar

hive>add jar /home/h3h.jar;

创建临时函数

hive>create temporary function myfunc as "edu.qianfeng.UDF.FirstUDF";

测试是否添加好:

show functions;select myfunc("1603");

确定无用时可以删除:

drop temporary function myfunc;

第二种:(当前session有效)

package edu.qianfeng.UDF;import org.apache.hadoop.hive.ql.exec.UDF;import org.JSON.jsONException;import org.json.JSONObject;public class KeyToValue extends UDF{ public String evaluate(String str,String key){  if(str == null || key == null){   return null;  }  //sex=1&hight=180&weight=130&sal=28000  //{sex:}  String str1 = str.replace("=", ":");  String str2 = str1.replace("&", ",");  String str3 = "{"+str2+"}";  String value = "";  try {   JSONObject jo = new JSONObject(str3);   value = jo.get(key).toString();  } catch (JSONException e) {   e.printStackTrace();  }  return value; } public static void main(String[] args) {  System.out.println(new KeyToValue().evaluate("sex=1&hight=180&weight=130&sal=28000&facevalue=900", "facevalue")); }}

添加自定UDF的jar包(hive.aux.jars.path在该目录下的jar会在hive启动时自动加载)

<property>    <name>hive.aux.jars.path</name>    <value>$HIVE_HOME/auxlib</value></property>

cp /home/h3h.jar $HIVE_HOME/auxlib/

启动hive,创建临时函数

hive>create temporary function ktv as "edu.qianfeng.UDF.KeyToValue";

测试是否添加好:

show functions;select myfunc("1603");

确定无用时可以删除:

drop temporary function myfunc;

第三种:(当前session有效)

创建一个初始化文件:

vi ./init-hiveadd jar /home/h3h.jar;create temporary function ktv1 as "edu.qianfeng.UDF.KeyToValue";

启动使用命令:

hive -i ./init-hive

测试是否添加好:

show functions;select myfunc("1603");

确定无用时可以删除:

drop temporary function myfunc;

第四种:(做成永久性)

package edu.qianfeng.UDF;import java.text.ParseException;import java.text.SimpleDateFORMat;import java.util.Calendar;import java.util.Date;import org.apache.hadoop.hive.ql.exec.UDF;public class BirthdayToAge extends UDF{    public static void main(String[] args) {  System.out.println(new BirthdayToAge().evaluate("2000-04-20")); } public String evaluate(String birthday){  if(birthday == null || birthday.trim().isEmpty()){   return null;  }  String age = "";  try {   //获取出生时间   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");   //获取出生的时间戳   long bithdayts = sdf.parse(birthday).getTime();   //获取今天的时间戳   long nowts = new Date().getTime();   //获取从出生到现在有多少秒   long alldays = (nowts - bithdayts)/1000/60/60/24;   if(alldays < 0){    return null;   }   //判断闰年   int birthdayyear = Integer.parseInt(birthday.split("-")[0]);   Calendar ca = Calendar.getInstance();   int nowyear = ca.get(Calendar.YEAR);   //循环找   int rnday = 0;   for (int i = birthdayyear; i < nowyear; i++) {    if((i%400 == 0) || (i%4 == 0 && i%100 != 0)){     rnday ++ ;    }   }   //将闰年的额天数减掉   age = (alldays-rnday)/365+"";  } catch (ParseException e) {   return null;  }  return age; } }

需要对源码编译。 1)将写好的Jave文件拷贝到~/install/hive-0.8.1/src/ql/src/java/org/apache/hadoop/hive/ql/UDF/

cd  ~/install/hive-0.8.1/src/ql/src/java/org/apache/hadoop/hive/ql/UDF/ls -lhgt |head

2)修改~/install/hive-0.8.1/src/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionReGIStry.java,增加import和RegisterUDF

import com.meilishuo.hive.UDF.UDFIp2Long;   //添加importregisterUDF("ip2long", UDFIp2Long.class, false); //添加register

3)在~/install/hive-0.8.1/src下运行ant -Dhadoop.version=1.0.1 package

cd ~/install/hive-0.8.1/srcant -Dhadoop.version=1.0.1 package

4)替换exec的jar包,新生成的包在/hive-0.8.1/src/build/ql目录下,替换链接

cp hive-exec-0.8.1.jar /hadoop/hive/lib/hive-exec-0.8.1.jar.0628rm hive-exec-0.8.1.jarln -s hive-exec-0.8.1.jar.0628 hive-exec-0.8.1.jar

5)重启进行测试

到此,相信大家对“怎么编写UDF函数”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 怎么编写UDF函数

本文链接: https://www.lsjlt.com/news/229984.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么编写UDF函数
    本篇内容主要讲解“怎么编写UDF函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么编写UDF函数”吧!1.为什么需要UDF?1)、因为内部函数没法满足需求。2)、hive它本身就是一个灵活框...
    99+
    2023-06-02
  • MySQL中怎么编写UDF
    MySQL中怎么编写UDF,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 1.什么是UDF UDF顾名思义,就是User defined ...
    99+
    2024-04-02
  • Hive中如何配置与编写自定义UDF函数
    小编给大家分享一下Hive中如何配置与编写自定义UDF函数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!环境介绍:CentOS7+hive-1.1.0-cdh6....
    99+
    2023-06-03
  • 怎么在Bash中编写函数
    这篇文章给大家分享的是有关怎么在Bash中编写函数的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。通过编写函数来减少代码的冗余和维护。在编程时,实际上是在定义要由计算机执行的过程procedure或例程routin...
    99+
    2023-06-15
  • python编写函数后怎么调用
    要调用Python中的函数,可以按照以下步骤进行:1. 首先,确保你已经定义了你想要调用的函数。函数的定义通常包括函数名、参数列表和...
    99+
    2023-09-29
    python
  • Pig中怎么编写自定义函数
    要在Pig中编写自定义函数,可以按照以下步骤进行: 创建一个实现了EvalFunc 接口的自定义函数类,并重写evaluate 方...
    99+
    2024-04-02
  • python怎么编写一个求和函数
    你可以用以下代码编写一个求和函数: def sum_numbers(numbers): total = 0 for ...
    99+
    2023-10-24
    python
  • SparkSQL的自定义函数UDF使用
    目录Spark_SQL的UDF使用UDF简单使用Spark_SQL的UDF使用 用户自定义函数,也叫UDF,可以让我们使用Python/Java/Scala注册自定义函数,并在SQL...
    99+
    2023-02-01
    Spark SQL UDF Spark自定义函数UDF
  • 怎么用python编写一个冒泡函数
    以下是一个用Python编写的冒泡排序函数:```pythondef bubble_sort(arr):n = len(arr)# ...
    99+
    2023-09-20
    python
  • python如何编写函数
    小编给大家分享一下python如何编写函数,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、long(长整型)和float(浮点型)。2....
    99+
    2023-06-14
  • php函数怎么写
    小编给大家分享一下php函数怎么写,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!php函数写法是“<php function functionName(){...}”,函数的名称应该提示出它的功能,并且函数名称是以字...
    99+
    2023-06-14
  • 如何编写 PHP 函数库?
    在 php 中编写函数库的步骤如下:创建一个 php 文件(例如 myfunctions.php)来存放函数。使用 function 关键字在文件中定义函数。在其他脚本中使用 requi...
    99+
    2024-04-17
    php 函数库
  • 如何编写 Golang 文件读写函数?
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-15
  • chatGPT怎么写compose函数
    这篇文章主要介绍了chatGPT怎么写compose函数的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇chatGPT怎么写compose函数文章都会有所收获,下面我们一起来看看吧。1 结果给出结果的示例代码,我...
    99+
    2023-07-05
  • instr函数mysql怎么写
    instr函数在mysql中的用法语法:INSTR(str,substr)注:str:从哪个字符串中搜索substr:要搜索的子字符串sql语句如下:# 将instr结果作为一列,并按其排序select id,1 from wor...
    99+
    2024-04-02
  • Linux下怎么编写和使用自定义的Shell函数和函数库
    本篇内容主要讲解“Linux下怎么编写和使用自定义的Shell函数和函数库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux下怎么编写和使用自定义的Shell函数和函数库”吧!在 Linu...
    99+
    2023-06-16
  • golang高效函数编写指南
    遵循这些指南可编写高效的 go 函数:避免使用全局变量。对于小型值类型,按值传递;对于大型值类型,按指针传递。仅在必要时才分配值。使用内联函数。减少参数数量。 Go 高效函数编写指南 ...
    99+
    2024-04-26
    golang 函数编写
  • matlab如何编写函数文件
    要编写一个函数文件,你需要使用MATLAB的编辑器。以下是编写函数文件的步骤:1. 打开MATLAB的编辑器。你可以通过点击主窗口工...
    99+
    2023-10-10
    matlab
  • 如何在Bash中编写函数
    本篇内容主要讲解“如何在Bash中编写函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何在Bash中编写函数”吧!通过编写函数来减少代码的冗余和维护。在编程时,实际上是在定义要由计算机执行的...
    99+
    2023-06-05
  • VBS字符串编码转换函数代码怎么写
    这篇“VBS字符串编码转换函数代码怎么写”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“VBS字符串编码转换函数代码怎么写”文...
    99+
    2023-07-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作