首页 > 其他分享 >1006-Hive的自定义UDF函数

1006-Hive的自定义UDF函数

时间:2023-07-20 12:02:30浏览次数:34  
标签:18610637891 0001 自定义 hadoop hive UDF external 1006 bm0002


hive可以任意定义一个函数,然后该函数放到hive的classpath下,在进入hive中,使用该命令操作




场景:设中国移动的用户在商城上下单,下单记录的主要字段包括



订单号     手机号码               商品编码          商品数量          渠道



10000     18810637891     bm0001          1                      0001  



10001     18710637891     bm0002          2                      0002



10002     18710637891     bm0001          1                      0001



10003     18610637891     bm0002          2                      0003



10004     18610637891     bm0002          5                      0001



10005     18610637891     bm0004          2                      0005






已知:如何根据手机号得知该用户对应的省份。假设规则如下(即:手机号前三位和省份的对应的关系)



188     北京(bj)



187     上海(sh)



186     河北(hb)









对上面的记录在手机号的后面加上省份字段,然后把其余字段输出并上传hdfs上






解决方案:



1、下单记录日志存放在日志文件jforder.log中


[hadoop@cloud01 sbin]$ hadoop fs -mkdir /external
[hadoop@cloud01 sbin]$ hadoop fs -mkdir /external/hive









hive> create external table  jf_order (orderNo string ,mobileNo string,wareCode string,amount int ,channel string)
     > row format delimited
     > fields terminated by '\t'
     > location '/external/hive';





[hadoop@cloud01 ~]$ more jforder.log
10000     18810637891     bm0001     1     0001 
10001     18710637891     bm0002     2     0002
10002     18710637891     bm0001     1     0001
10003     18610637891     bm0002     2     0003
10004     18610637891     bm0002     5     0001
10005     18610637891     bm0004     2     0005
[hadoop@cloud01 ~]$ hadoop fs -put jforder.log /external/hive









2、编写hive的函数areaFunction,作用根据手机号获取对应的用户省份






3、启动eclipse,编写udf函数



/**
 
    
 * @function: 定义省份转换函数,加载hive的 classpath下,可以直接使用
 
    
 * @author shenfl
 
    
 * @version:1.0
 
    
 * @date: 2015 -5- 31
 
    
 *
 
    
 */
 
    
public class AreaFunction extends
 
    
     
 
    
/*定义静态变量*/
 
    
public static Map<String, String> map = new HashMap<String,String
 
    
     /*可扩展数据数据库获取*/
 
    
static{
 
    
map .put("188" ,"北京"
 
    
map .put("187" , "上海"
 
    
map .put("186" ,"河北"
 
    
     }
 
    
public String evaluate(String mobileNumber
 
    
return mobileNumber + "\t" + map .get(mobileNumber
 
    
     }
 
    
     
 
    
public static void main(String [] args
 
    
area = new
 
    
String mobileNumber = "18810635789"
 
    
String rs = area.evaluate( mobileNumber
 
    
out .println(rs
 
    
     }
 
    
}



4、上传编写的函数,把编写好的函数放到hive的classpath下



hive>add jar /home/hadoop/hiveudf.jar;
 
 
hive>create temporary function area2 as 'com.hive.AreaFunction';





5、验证



hive> select orderNo ,area2(mobileno),wareCode,amount ,channel from jf_order;



6、强化后的结果存储到hdfs上



hive> insert overwrite directory  '/hiveout'  select orderNo ,area2(mobileno),wareCode,amount ,channel from jf_order;




标签:18610637891,0001,自定义,hadoop,hive,UDF,external,1006,bm0002
From: https://blog.51cto.com/u_14361901/6784093

相关文章

  • mysql 自定义排序
    MySQL自定义排序的实现概述在MySQL中,我们可以通过自定义排序来按照自己的需求对查询结果进行排序。自定义排序可以用于对某一列进行特殊排序,例如按照指定的顺序或者特定的规则排序。本文将详细介绍在MySQL中实现自定义排序的步骤和代码示例。流程下面是实现MySQL自定义排序的基......
  • Test Commands-Functions下——创建自定义Test Case
    TestCommands-Functions下_哔哩哔哩_bilibili基于上一节所创建的测试实例,编写多个不同车速的TestCase,若仅改变信号EngineSpeed的值,也要重复编写多次,花费时间长且易出错,这时可通过Functions功能自定义一个TestCase模板,并基于该模板添加多个TestCase用例1)选择Functions——Tes......
  • Taro 小程序自定义热门城市选择页
    先上一下大致效果由于业务需要一个单独全国城市筛选页面,然后就网上找了一波,发现没有特别合适的,于是就手动撸一个,需要当前页面具备以下功能:1.定位当前所在城市2.展示热门城市信息3.清空当前城市选择4.支持本地快捷搜索5.列表数据支持分页展示(主要是城市数据量太大,页面渲染......
  • 前端Vue自定义开屏启动广告组件,点击广告图跳转广告详情
    随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。通过组件化开发,可以有效实现单独开发,单独维护,而且他们之间可以随意的进行组合。大大提升开发效率......
  • 数据仓库udf
    数据仓库UDF(用户定义函数)什么是数据仓库?数据仓库(DataWarehouse)是指集成、清洗、整理和存储大量结构化和非结构化数据的系统。它是用于支持企业决策和分析的重要工具。数据仓库可以从多个源系统中提取数据,并将其转化为可理解和可用于分析的格式。数据仓库通常包含历史数据,以便进......
  • el-form 自定义验证规则,手动触发某项验证
    1.ui<el-formref="xXXForm":rules="XXXFormRules"> <el-form-itemlabel="图片"prop="xxx"> </el-form-item></el-form>2.变量初始化exportdefault{data(){return{ ...... XXXForm......
  • JAVA-- 在Java8 Parallel Stream中如何自定义线程池?
    使用ParallelStream时,在适当的环境中,通过适当地使用并行度级别,可以在某些情况下获得性能提升。如果程序创建一个自定义ThreadPool,必须记住调用它的shutdown()方法来避免内存泄漏。ParallelStream默认使用的线程池如下代码示例,ParallelStream并行处理使用的线程池是ForkJoi......
  • 带你玩转自定义view系列--Android画笔的详解
    View的简介View是Android所有控件的基类,接下来借鉴网上的一张图片让大家一目了然(图片出自:http://blog.51cto.com/wangzhaoli/1292313)imageAndroid画笔的详解Android提供了2D图形绘制的各种工具,如Canvas(画布)、Point(点)、Paint(画笔)、Rectangles(矩形)等,利用这些工具可以直接在......
  • 免费使用cloudflare搭建OpenAI的接口代理
    由于GFW以及OpenAI官方的封禁,我们在国内服务器是访问不通OpenAI的官方接口的之前,我一直是使用一个网上找的第三方代理域名,但是担心使用别人的代理不安全、不稳定现在,我们可以使用cloudflare自己搭建一个OpenAI代理服务,使用我们自己的转发代理第一步:注册cloudflare账号前往官方......
  • elasticsearch 设置自定义分词
    要在Elasticsearch中使用MySQL数据库中定义的分词,你需要执行以下步骤:将MySQL数据库中的分词数据导入到Elasticsearch中:从MySQL数据库中提取分词数据,包括分词规则、停用词等。将这些数据转换为适合Elasticsearch使用的格式,例如JSON。使用Elasticsearch的API(如BulkAPI)将分词......