Java实现Hive UDF详细步骤 (Hive 3.x版本,IDEA开发)

这篇具有很好参考价值的文章主要介绍了Java实现Hive UDF详细步骤 (Hive 3.x版本,IDEA开发)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

老版本编写UDF时,需要继承 org.apache.hadoop.hive.ql.exec.UDF类,然后直接实现evaluate()方法即可。
由于公司hive版本比较高(3.x),这次编写UDF就采用了新的版本,继承类org.apache.hadoop.hive.ql.udf.generic.GenericUDF,实现三个方法

1. 新建项目

打开IDEA,新建一个项目,基本配置如下,Archetype选择图中所示
Java实现Hive UDF详细步骤 (Hive 3.x版本,IDEA开发),Hive,java,java,hive,intellij-idea,udf

2.配置maven依赖

导入编写UDF需要用到的依赖

<dependencies>
    <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec -->
    <dependency>
      <groupId>org.apache.hive</groupId>
      <artifactId>hive-exec</artifactId>
      <version>3.1.2</version>
      <exclusions>
        <exclusion>
          <groupId>org.apache.commons</groupId>
          <artifactId>commons-compress</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>8</source>
          <target>8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>

3.编写代码

目录结构可自行定义,这块不影响实际功能,代码整体框架如下
我这里代码传入三列数据,返回一列数据,入参可以判断一下是否传入数据正确,以及数据类型是否匹配
主要实现三个方法,具体内容在代码块中有说明

  1. initialize
  2. evaluate
  3. getDisplayString
public class ComputeUnitPrice extends GenericUDF {
 WritableHiveDecimalObjectInspector  decimalObjectInspector;

    //初始化方法,做一些检查
    @Override
    public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException {
        // 判断输入参数的个数
        if(arguments.length !=3){
            throw new UDFArgumentLengthException("This UDF Only takes 3 arguments: String, String, Decimal");
        }
        ObjectInspector param1 = arguments[0];
        ObjectInspector param2 = arguments[1];
        ObjectInspector param3 = arguments[2];
        // 判断输入参数的类型
        if(!(param1 instanceof StringObjectInspector)){
            throw new UDFArgumentException("Param1 Type is error,Must be : String");
        }
        if(!(param2 instanceof StringObjectInspector)){
            throw new UDFArgumentException("Param2 Type is error,Must be : String");
        }
//        if(!(param3 instanceof JavaConstantHiveDecimalObjectInspector)){
//            throw new UDFArgumentException("Param3 Type is error,Must be : JavaHiveDecimal");
//        }
        this.decimalObjectInspector = (WritableHiveDecimalObjectInspector ) param3;
        //函数返回值为 Decimal,需要返回 Decimal类型的鉴别器对象
        return PrimitiveObjectInspectorFactory.javaHiveDecimalObjectInspector;
    }
}

    @Override
    public Object evaluate(DeferredObject[] arguments) throws HiveException {
        //计算逻辑编写
    }

	//udf的说明
	@Override
    public String getDisplayString(String[] children) {
        return "ComputeUnitPrice";
    }


    //main方法测试一下数据结果
	public static void main(String[] args) throws HiveException {
        ComputeUnitPrice computeUnitPrice = new ComputeUnitPrice();

        DeferredObject[] param = {new DeferredJavaObject("箱"), new DeferredJavaObject("800g*8袋/箱"), new DeferredJavaObject(100.20)};
        JavaDoubleObjectInspector javaDoubleObjectInspector = PrimitiveObjectInspectorFactory.javaDoubleObjectInspector;

        ObjectInspector stringOi = PrimitiveObjectInspectorFactory.javaStringObjectInspector;
        ObjectInspector doubleOi = PrimitiveObjectInspectorFactory.javaDoubleObjectInspector;
        computeUnitPrice.initialize(new ObjectInspector[]{stringOi, stringOi,doubleOi});
        double res =  javaDoubleObjectInspector.get(computeUnitPrice.evaluate(param));
        System.out.println("res " + res);
       
    }

4.打jar包

将项目打成jar包

mvn clean package

执行完成,target目录下寻找自己的jar包

5.上传服务器

本地上传到机器,再由机器上传到hdfs或者s3等文章来源地址https://www.toymoban.com/news/detail-738809.html

6.代码中引用

add jars xxxxx/compute_sku_unit_price.jar;
create temporary function compute_sku_unit_price as 'xx.xxx.xxx.xxx.ComputeUnitPrice';
${your_sql};

到了这里,关于Java实现Hive UDF详细步骤 (Hive 3.x版本,IDEA开发)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 通过IDEA将java程序或者项目打包为jar包(详细步骤)

    通过IDEA将java程序或者项目打包为jar包(详细步骤)

    通过IDEA将java程序或者项目打包为jar包 文章目录 目录 文章目录 一、使用java语言,编写一个字典(Dict)Demo 二、将Dict程序打包为jar包 代码如下: 1.点击file,点击project structure. 2.点击Artifacts,点击“+”,点击JAR,点击from......dependencies.  3.选择项目位置Module,和程序类Main Class(要

    2024年02月11日
    浏览(6)
  • 2023 最新版IntelliJ IDEA 2023.1创建Java Web 项目详细步骤(图文详解)

    2023 最新版IntelliJ IDEA 2023.1创建Java Web 项目详细步骤(图文详解)

    如果需要学习使用spring-boot3搭建Java Web项目,请移步:2023 最新版IntelliJ IDEA 2023.1创建Java Web前(vue3)后端(spring-boot3)分离 项目详细步骤(图文详解) 安装什么的这里就不说了,都是傻瓜式的安装,但是你需要知道安装的位置,切记!切记! 使用版本:java 20.0.1 2023-04-18 官

    2024年02月05日
    浏览(11)
  • starrocks3.0 编写自定义UDF java/scala版本 clickhouse中countResample

    starrocks3.0 编写自定义UDF java/scala版本 clickhouse中countResample

    通过自定义UDAF 实现clickhouse中的内置函数 countResample  Java UDF | StarRocks java scala都可以 java可以  scala一直报错类找不到 实际上类在的

    2024年01月25日
    浏览(8)
  • 用Idea开发JAVA项目多JDK版本切换

    用Idea开发JAVA项目多JDK版本切换

    在我们项目开发的过程中可能会遇到JDK版本过高或者过低导致一些程序无法启动,不兼容的问题。所以我们需要切换JDK的版本号,目前JDK8是比较稳定的。接下来分享一下如何在IDEA中切换JDK的版本。 1.点击File中的Project Structure这个选项 2.点击SDKs按钮 3.点击“+”按钮,然后点击

    2024年02月16日
    浏览(8)
  • macOS中配置Java开发环境的详细步骤

    macOS中配置Java开发环境的详细步骤

    R语言某些包需要配置Java开发环境,作为一个软件小白,用mac本在安装的时候碰到了很多问题。本帖为自己安装过程的整理,操作写得比较细且很笨蛋,如有问题请各位大神轻喷~ 参考如下: 主要流程:Mac环境下配置Java开发环境(jdk maven tomcat idea) - 知乎 maven安装:https:/

    2024年02月04日
    浏览(9)
  • IDEA切换JDK版本超详细步骤

    IDEA切换JDK版本超详细步骤

    😀 IDEA切换JDK版本详细教程,全网步骤最详细,实测可用。 第一步、选择SDKs切换SDK版本: 依次点击File——Project Structure——SDKs,如果没有相应版本点③添加,有相应版本直接点④选择即可,如这里选择SDK17: 第二步、选择Modules切换Sources和Dependencies版本: 接着上一步,还是

    2024年03月22日
    浏览(8)
  • Java 亚马逊Amazon spapi对接开发,java Sdk,授权和接口访问步骤详细说明

    Java 亚马逊Amazon spapi对接开发,java Sdk,授权和接口访问步骤详细说明

    确认是否收到通过sp-api开发人员资料申请。   创建一个策略,我们建议您将 IAM 策略命名为 SellingPartnerAPI 。     开发商名称:任意字符 开发者id :accessKeyId 客户端相关信息,包含clientId和clientSecret。 1.8.1访问需要的参数和数据如图 参数 说明 样例 roleArn 角色Arn,在角色中

    2024年02月03日
    浏览(9)
  • 搭建Java集成开发环境IntelliJ IDEA(超详细)

    搭建Java集成开发环境IntelliJ IDEA(超详细)

    IntelliJ IDEA是一款由JetBrains公司开发的Java集成开发环境(Integrated Development Environment,简称IDE),被誉为Java开发者首选的高效智能开发工具。它以其卓越的代码自动补全、动态语法检测、重构功能以及对各种主流框架和前沿技术的深度支持而闻名。通过高度可定制化的插件系统

    2024年04月28日
    浏览(28)
  • IDEA若依框架入门(前后端分离版本) 0基础详细步骤代码导入运行

    IDEA若依框架入门(前后端分离版本) 0基础详细步骤代码导入运行

    若依官网:http://ruoyi.vip (这些准备工作,都会在其他章节持续更新相应操作步骤的奥~请关注我❤) JDK = 1.8 (推荐1.8版本) Mysql = 5.7.0 (推荐5.7版本) Redis = 3.0 Maven = 3.0 Node = 12 官网地址:https://gitee.com/y_project/RuoYi-Vue 1.可以点击克隆/下载,直接导出。下载后解压即可导入IDEA使用

    2024年02月09日
    浏览(10)
  • 2023年最新IDEA中 Java程序 | Java+Kotlin混合开发的程序如何打包成jar包和exe文件(gradle版本)

    2023年最新IDEA中 Java程序 | Java+Kotlin混合开发的程序如何打包成jar包和exe文件(gradle版本)

    一. JAVA | JAVA和Kotlin混开开发的程序打包成jar方法 1.1 方法一 :IDEA中手动打包 1.2 方法二 :build.gradle中配置后编译时打包 二. JAVA | JAVA和Kotlin混合开发的程序打包成exe的方法 纯JAVA | 纯Kotlin | JAVA和Kotlin混合开发打包其实都一样的,因为jar包中主要还是class文件,而kotlin在编译后

    2024年02月12日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包