当前位置: 首页 > news >正文

大数据学习路线_好程序员大数据学习路线分享UDF函数

好程序员大数据学习路线分享UDF函数

2e46aa21216f05962ff2642cd48a1a24.png

1.为什么需要UDF?

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

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

2.UDF是什么?

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

3.怎么编写UDF函数??

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

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

4.UDF的使用

第一种:(当前session有效)

package edu.qianfeng.UDF;

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

/**

* 使用Java 自定义UDF

* @author lyd

*

*1603 1603_class

*/

public class FirstUDF extends UDF{

//重写evaluate()

public String evaluate(String str){

//判断

if(str == null){

return null;

}

return str+"_class";

}

}

1、添加自定UDF的jar包

hive>add jar /home/h2h.jar;

2、创建临时函数

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

3、测试是否添加好:

show functions;

select myfunc("1603");

4、确定无用时可以删除:

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("=

相关文章:

  • pythonscatter简书_Python笔记 - tkinter
  • 模糊查询正则语句_数据分析进阶—简单查询
  • python编写一个排序函数要求数据输入_python自学日记9——选择数据结构
  • python输出语句print_Python每日3题print(c)会输出什么?
  • 命令行参数python sys模块_Python中处理命令行参数的3种方法
  • python菜鸟教程for循环_Python for 循环语句
  • 格力手机2 官方固件_格力悄悄上线首部双模5G手机:搭载骁龙765G,售价2699元起...
  • c#怎么拟合函数得到参数_数值计算(三十七)给定函数的参数拟合
  • python decorators_Python进阶之强大的装饰器 Decorators (一)
  • 设备能力指数cmk计算公式_拧紧微课堂|关于CM,CMK,CP,CPK
  • sql 转置_SQL -- 练习汇总
  • python语言中打印到屏幕上的函数是什么_Python基础之白话说函数
  • 概率论与数理统计思维导图_2020年基础考试高等数学思维导图
  • 用python画圆角矩形_如何用OpenCV绘制圆角矩形(带圆角的矩形)?
  • vfp控制excel选择全表_Excel快速填充功能,让你输入数据不只是快一点点
  • Akka系列(七):Actor持久化之Akka persistence
  • Android框架之Volley
  • ES6之路之模块详解
  • Invalidate和postInvalidate的区别
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • java第三方包学习之lombok
  • Java小白进阶笔记(3)-初级面向对象
  • Java新版本的开发已正式进入轨道,版本号18.3
  • PAT A1120
  • Python中eval与exec的使用及区别
  • springboot_database项目介绍
  • Swift 中的尾递归和蹦床
  • Vue ES6 Jade Scss Webpack Gulp
  • Vue.js源码(2):初探List Rendering
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 盘点那些不知名却常用的 Git 操作
  • 前嗅ForeSpider教程:创建模板
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 手写双向链表LinkedList的几个常用功能
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 字符串匹配基础上
  • 正则表达式-基础知识Review
  • ​决定德拉瓦州地区版图的关键历史事件
  • # Maven错误Error executing Maven
  • $().each和$.each的区别
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (一)80c52学习之旅-起始篇
  • (转)c++ std::pair 与 std::make
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)负载均衡,回话保持,cookie
  • .Net Memory Profiler的使用举例
  • .NET 表达式计算:Expression Evaluator
  • @RequestMapping 的作用是什么?
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯
  • [C#]OpenCvSharp结合yolov8-face实现L2CS-Net眼睛注视方向估计或者人脸朝向估计
  • [C#]猫叫人醒老鼠跑 C#的委托及事件