udf开发入门(python udf、hive udf)

article/2025/9/2 6:31:18

开发前的声明

        udf开发是在数据分析的时候如果内置的函数解析不了的情况下去做的开发,比方说你只想拆分一个字段,拼接一个字段之类的,就不要去搞udf了,这种基本的需求自带函数完全支持,具体参数可参考文档:

        http://spark.apache.org/docs/latest/api/sql/search.html?q=cast

        里面列举了所有函数的介绍和使用,推荐优先使用官方推出的,因为自己写的udf如果对一些异常处理不到位可能会导致数据分析的失败或者意想不到的情况。但是内置的函数真的满足不了那就真的没办法了,比如在做数据分析的时候经常使用的是ip解析,这个通常就需要自己开发udf了。

udf的分类

        udf平常用的多的也就两种,一种java写的,一种python 所写,下面对这两种情况分别做个简单的demo供大家参考。

udf for java(idea)

        1.创建maven工程

            file->project structure->modules->点击+号->new module->选择maven

            

            点击next,填写groupid(对应包结构)、artifactid(maven仓库对应的坐标)

            source java 代码,操作如下图file->project structure,

            

            点击apply,

        2.开始写java代码

            pom文件添加依赖   

  <dependency><groupId>org.apache.hive</groupId><artifactId>hive-exec</artifactId><version>1.1.0</version></dependency>

                     

import org.apache.hadoop.hive.ql.exec.UDF;public class HelloUdf  extends UDF {public String evaluate(String ip) {return ip+ip;}public int evaluate(int ip) {return ip+ip;}}

 

       3.编包上传到hdfs

          在此项目pom文件的路径下执行mvn clean install

          将target文件中生成的jar文件上传到hdfs上,路径自己自定义,我直接上传到/。

          sudo -u hdfs hdfs dfs -put testudf-1.0-SNAPSHOT.jar /

      4.使用hivesql或者sparksql加载自定义函数

           beeline -u jdbc:hive2://node113.leap.com:10000 -n hive

           create function test.iptonum as 'com.test.HelloUdf' using jar 'hdfs:///testudf-1.0-SNAPSHOT.jar';

           (com.liubl.HelloUdf为代码类的全路径自己去粘贴一下)

           (测试sql见图)

           

udf for python

        python udf入门我就不重新阐述了,我看到有一位同学的博客写的很清晰,推荐博客

        https://blog.csdn.net/qq_26937525/article/details/54136317

        存在的问题:   

            在数据清洗过程中,如果使用的是TransForm而不是UDF的话,因为Python是直接向系统申请资源的,而不是像ResourceManager申请资源,故会导致启动的Python脚本对内存和CPU的使用不可控,尤其是当启动多个Map时,因为一个map将启动一个Python因此,当同时运行的map有几十个时(测试集群较小),同时将尝试启动相同个数的python(资源够用的话仍然会启动几十个),且此时Map占用的内存是不会释放掉的他在一直等待Python的结果,这将导致python可用的资源仅仅是原本分配给系统的很少的资源(注:在安装Hadoop时,对于单个节点,一般仅仅给系统留出很少的内存,其他的内存全部分给了集群。例如32G物理内存的节点给系统和dataNode+nodeManager的内存就4-8个G,同时CPU核数也不足节点的一半,剩余的内存和cpu核数全部划分给集群使用。需要注意的是,这里虽然说是划分给集群使用,仅仅是逻辑上的划分,即规定集群可以使用的最大的物理内存,超过该内存时MR可以认为是不会抢占分配给系统+DataNode+nodeManager的内存的,但是当集群中没有MR在执行,即没有map或者reduce在执行时,划分给集群的这部分资源是可以被系统使用的。而若有map和Reduce在执行时,运行map和reduce的JVM的资源不会因为系统进程需要使用而被释放掉)所以,所有正在执行的Map一直在等待python的运行结果而没有释放掉其自身占用的资源,故python无法使用分配给集群的资源而只能使用预留给系统+nodeManager+DataNode的4-8G的内存和很少的cpu核数。因此会导致集群的资源无法被高效利用。


         综上,使用Transform(Python)执行效率低的根本原因在于Python是直接向操作系统申请资源,而不是向YARN的ResourceManager申请资源,故而导致节点的资源无法高效组织和被利用。此外,不要轻易使用transform!不要轻易使用transform!不要轻易使用transform

 


http://chatgpt.dhexx.cn/article/C5pNwGWI.shtml

相关文章

UDF的入门科普

新入门的小伙伴们好像对udf有一些疑问&#xff0c;那么今天就给大家整理一些udf的学习资料供大家参考。&#xff08;公众号&#xff1a;刘华强仿真笔记&#xff09; 01 UDF的基本概念 UDF的定义? UDF 是用户自己用C语言写的一个函数&#xff0c;可以和FLUENT动态链接 用UDF…

FLUENT中初识UDF——UDF的简单使用(1)

FLUENT中初识UDF——UDF的简单使用&#xff08;1&#xff09; 注意&#xff1a;不包含其他ANSYS基本操作流程&#xff01;&#xff01;&#xff01;1&#xff1a;UDF的编写&#xff1a;2&#xff1a;ANSYS中导入UDF函数&#xff1a;2.1&#xff1a;首先打开Fluent&#xff0c;导…

对window的注册表进行优化

Regclean pro是一款优秀的注册表扫描、清理工具&#xff0c;由微软金牌合作伙伴Systweak开发。 它具有强大的Windows注册表检测及修复功能&#xff0c;可以帮助用户轻松而有效的清理、修复Windows 系统注册表中缺省的、被破坏的或残缺的系统参数&#xff0c;轻松提升系统性能。…

Windows注册表基本管理配置

一.注册表优化 注册表的优化分为几点: 1.系统安装是产生的无用信息 &#xff08;1&#xff09; 删除多余的时区 路径&#xff1a;计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones 删除除了China Standard Time中国时区以外的其他时区…

Windows与网络基础-19注册表维护与优化

目录 一、注册表维护 1.1注册表被破坏后的常见现象 1.2注册表被破坏的原因 1.3备份注册表 1.4恢复注册表 1.5锁定和解锁注册表 二、注册表的优化 2.1删除多余的DLL文件 2.2安装卸载应用程序的垃圾信息 2.3系统安装时产生的无用信息 2.3.1删除多余时区&#xff08;必…

Win7注册表优化工具箱

软件名称&#xff1a;Win7注册表优化工具箱 软件版本&#xff1a;1.0.0.0 软件大小 1.04MB 适用环境&#xff1a; win7 软件性质&#xff1a; 国产软件 - 系统工具 - 优化设置 下载地址 http://pan.baidu.com/share/link?shareid104303&uk4160867570# 本文转自hai…

windows注册表

第一课 注册表基础 一、什么是注册表 注册表是windows操作系统、硬件设备以及客户应用程序得以正常运行和保存设置的核心“数据库”&#xff0c;也可以说是一个非常巨大的树状分层结构的数据库系统。 注册表记录了用户安装在计算机上的软件和每个程序的相互关联信息&#…

玩转电脑|盘点一下Windows 10 注册表系统优化【 InsCode Stable Diffusion 美图活动一期】

目录 什么是注册表 组成 Windows 注册表的层次结构 如何在 Windows 11/10 中创建注册表项 1、使用注册表编辑器 2、使用命令行 3、使用记事本创建REG文件 注意&#xff1a;在本文中主要就是使用记事本创建REG文件来修改。 注册表代码 修改状态栏透明度 任务栏时间显…

计算机系统的优化具体操作,注册表优化电脑内存的详细操作步骤

注册表优化电脑内存 当我们在使用电脑出现内存不足的情况下&#xff0c;通常会选择升级内存的方式来解决相关问题。而加了一个内存条之后&#xff0c;通常你会发现运行速度并没有等到比较显著的改善。只有在运行一些大程序的时候才能感觉到有所提升。这是因为系统会照顾到使用低…

win10清理注册表的方法

如果不需要某款软件之后&#xff0c;我们将其从电脑上卸载之后&#xff0c;如果不清理干净注册表信息的话可能日积月累会对电脑运行造成影响。那么win10如何清理注册表多余信息呢&#xff1f;今天小编就教下大家win10清理注册表的方法。 具体的方法如下&#xff1a; 1、在桌面…

Reg Organizer v8.75 注册表及系统清理优化工具

前言 Reg Organizer是一个非常好用的编辑、整理注册表文件软件&#xff0c;在导入reg文件前&#xff0c;会先分析结构&#xff0c;供您确认。它是一个功能丰富的应用程序&#xff0c;旨在编辑、清理和维护注册表&#xff0c;修复系统中的错误&#xff0c;并提高计算机性能。深…

暴力解决注册表删不掉的问题

今天在使用注册表编辑器修改注册表权限的时候&#xff0c;不小心把所有用户对某个注册表的权限全部拒绝了。等到我再想修改的时候&#xff0c;右键点击该文件&#xff0c;选择了“权限”后&#xff0c;弹出的编辑界面的“组或用户名”一栏中没有出现任何内容。倒腾了半天也实在…

Windows与网络基础:注册表基础和注册表维护与优化

学习目标 1.理解注册表概念 2.掌握注册表维护及优化方法 目录 一、注册表基础1、概述2、早期的注册表3、Windows 95后的注册表4、注册表结构4.1、注册表以树状结构进行呈现4.1.1子树&#xff08;实际只有两棵子树&#xff0c;为了方便操作&#xff0c;分成了5棵子树)4.1.2、项…

No1.Windows10系统优化设置注册表项

Windows10.22H2.19045.2193 2022‎年‎11‎月‎4‎日 Windows Registry Editor Version 5.00#在锁屏界面上显示通知、提醒和VoIP来电、播放声音-关闭 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings] "NOC_GLOBAL_SETTING_AL…

注册表的维护与优化,硬核实操讲解

作者介绍大家好&#xff0c;我是柒烨~ 系列专栏 《网络安全 --> Windows与网络基础》 学习是一个好习惯&#xff0c;更是你和我每个人的成长手段&#xff0c;如何灵活应用且高效的去使用才是关键&#xff01;不要让生活中的拖延占据你过多的时间&#xff0c;更要和生活中的…

Windows与网络基础-19-注册表维护与优化

目录 一、 注册表维护 1.1 注册表被破坏后的常见现象 1.2 注册表被破坏的原因 1.3 备份注册表 1.4 恢复注册表 1.5 注册表锁定和解锁 二、注册表优化 2.1 清除多余的DLL文件 2.2 安装卸载应用程序的垃圾信息 2.3 系统安装时产生的无用信息 一、 注册表维护 1.1 注册表被…

Binder机制原理、源码、AIDL,IBinder,Binder,IInterface,BinderDriver,需要的都在这里了

导读&#xff1a; 本文分为三个阶段&#xff0c; 第一阶段&#xff0c;原理概述&#xff0c;力争说人话的基础上&#xff0c;讲明白Binder机制在搞什么&#xff0c;为什么这样搞&#xff0c;以及具体是怎么搞的。第二阶段&#xff0c;代码层面描述&#xff0c;主要描述了&…

Android进阶——Android跨进程通讯机制之Binder、IBinder、Parcel、AIDL

前言 Binder机制是Android系统提供的跨进程通讯机制&#xff0c;这篇文章开始会从Linux相关的基础概念知识开始介绍&#xff0c;从基础概念知识中引出Binder机制&#xff0c;归纳Binder机制与Linux系统的跨进程机制的优缺点&#xff0c;接着分析Binder的通信模型和原理&#x…

[转]IBinder对象在进程间传递的形式

目录&#xff1a; 问题引出&#xff1a;由onServiceConnected()的IBinder类型说起IBinder传递时Driver Module的处理IBinder传递时framework的处理发送IBinder接收IBinder 问题引出&#xff1a;由onServiceConnected()的IBinder类型说起 当service被远程调用时&#xff0c;我们…