hive引入外部函数-java实现

news2024/10/7 20:35:04

引入依赖

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

编写函数

注意必须要继承GenericUDF 类

import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
import org.apache.hadoop.hive.ql.metadata.HiveException;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDF;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;

public class SimilarEval extends GenericUDF {
    /**
     * 初始化方法,一般用来校验数据参数个数,返回值是int类型的PrimitiveObjectInspectorFactory
     * @param objectInspectors
     * @return
     * @throws UDFArgumentException
     */

    @Override
    public ObjectInspector initialize(ObjectInspector[] objectInspectors) throws UDFArgumentException {
        if (objectInspectors.length != 2){
            //判断参数个数是否为2,抛出异常
            throw new UDFArgumentException("参数个数必须为2,请重新输入");
        }
        return PrimitiveObjectInspectorFactory.javaIntObjectInspector;
    }

    /**
     * 业务逻辑处理方法
     * @param
     * @return
     * @throws HiveException
     */

    @Override
    public Object evaluate(DeferredObject[] deferredObjects) throws HiveException {
        //获取输入的参数
        String targetStr = deferredObjects[0].get().toString();
        String sourceStr = deferredObjects[1].get().toString();
        //判断输入数据是否为null,如果为null,返回0
        if (targetStr == null || sourceStr == null){
            return 0;
        }else{
            //输入数据不为null,进行业务处理
            int tar_len = targetStr.length();
            int b = 0;
            for (int i = 0; i < tar_len; i++) {
                String tmpChar = targetStr.substring(i,i+1);
                int a = sourceStr.indexOf(tmpChar);
                if (a >= 0){
                    a+=1;
                    b = b +1;
                } else{
                    a = 0;
                }
            }
            int result = (int) Math.round((b*100)/(double)tar_len);
            return result;
        }
    }

    /**
     *
     * @param strings
     * @return
     */
    @Override
    public String getDisplayString(String[] strings) {
        return "";
    }
}

项目结构

在这里插入图片描述

打成jar包,并上传到linux服务器,将jar包添加到hive指定路径

# 将jar包添加到hive指定路径
add jar hdfs:/stq/ltdq/jars/SimilarEval-1.0-SNAPSHOT.jar;
# 创建函数
create function similar_eval as 'SimilarEval';

使用效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/694533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5.按键输入

1.按键介绍&#xff1a; 按键WK_UP接在低电平&#xff0c;当按键按下检测到高电平&#xff1b;KEY0和KEY1接在高电平&#xff0c;当按键按下检测到低电平&#xff1b; 2.本次实验步骤&#xff1a; &#xff08;1&#xff09;GPIO输入操作&#xff1a; 读取IO口输入电平的库…

vue中实现将html导出为word文档

需求&#xff1a;将页面整成理想样式&#xff0c;将想要的那一部分页面导出成word,不用写模板&#xff0c;按照当前页面样式导出即可。&#xff08;简易版&#xff09; 保姆级别教程&#xff1a; 第一步&#xff1a;安装需要的依赖 npm install html-docx-js -Snpm install …

第11讲:使用ajax技术实现文件上传功能(jQuery)

软件项目开发过程中,文件上传功能是常用技术之一,经常需要上传文件过程中为了更好的体验,不允许刷新当前页面,这样就必须使用异步上传技术了,jQuery提供了异步上传的多种方法,下面跟大家一起探讨使用jQuery.form插件上传文件的功能,具体实现过程如下: 环境要求 序号资…

【单片机】MSP430 单片机 多路温度巡回检测仪的设计

多路温度巡回检测仪的设计 多路温度检测仪共有3个测温点&#xff0c;每个点连续检测8次&#xff0c;以平均值代表该点温度&#xff0c;并同时在 LCD 显示器&#xff0e;器任选&#xff0c;测量精度为1℃。系统每隔1秒完成一个点的测量。 设计以msp430g2553为核心的多路温度检测…

深度学习笔记之一看数据

最近在百度ai上跟了个“深度学习7日打卡营”的课程&#xff0c;目前看到人脸关键点检测章节&#xff0c;地址如下&#xff1a;飞桨AI Studio - 人工智能学习与实训社区 (baidu.com) 老师们讲解的很好&#xff0c;但是对于我这样的白菜来说&#xff0c;有些细节还是感觉略过去了…

Java-多线程

进程与线程 程序>进程>线程 程序是一段静止的代码&#xff0c;只有真正运行时的程序&#xff0c;才被称为进程。一个程序运行至少有一个进程 从操作系统底层来说&#xff0c;进程只是一个概念&#xff0c;真正执行的是线程。 进程是操作系统资源分配的基本单位&#x…

六、动画 - 旋转的应用例子,时钟

目录&#xff1a; 1.前期准备知识 2.实操 - 做时钟 3.完整代码 一、前期准备知识 因为旋转都是默认元素中心来旋转&#xff0c;所以&#xff0c;我们可以通过父元素包裹子元素。 通过父元素旋转&#xff0c;然后父带动子元素&#xff0c;到时候可以通过影藏父元素的背景颜色&a…

关于三元运算符强转的问题

1.int和char比较 public static void main(String[] args) {char x x;int i 10;char y 2;System.out.println(true? x: i);System.out.println(true? x: 1167);System.out.println(true?y:2);System.out.println((int)x);}JVM&#xff1a; public static void main(Stri…

CSS基础学习--23 CSS属性 选择器

一、定义 具有特定属性的HTML元素样式&#xff08;不仅仅是class和id&#xff09; 二、属性选择器 例子是把包含标题&#xff08;title&#xff09;的所有元素变为蓝色&#xff1a; <!DOCTYPE html> <html> <head> <style> [title] { color:blue; }…

Linux_CentOS_7.9修改更新默认时区

前言&#xff1a;近期一直在频繁部署虚拟机做系统测试发现Linux默认时区未做更改&#xff0c;这里做个记录留作参考。 查看服务器时区&#xff08;默认为纽约时间&#xff09; [rootorcl3 ~]# timedatectl 系统默认安装的所有时区&#xff0c;找到我们需要的时区 [rootor…

Proteus仿真之DAC(DAC0832)

1.数模/模数转换的目的&#xff1a;生活中常见的物理量如温度、流量、压力、位移、速度等都是一种模拟量。但是&#xff0c;计算机只能处理0、1的数字量&#xff0c;此时就需要将模拟量转为数字量。与此同时&#xff0c;MCU对模拟量设备进行控制时&#xff0c;如控制电动调节阀…

直播间自定义公屏视图的升级之路(View版)

目录 1.前言2.旧版设计的分析3.新版设计的分析4.代码实现&#xff08;View版本&#xff09;4.1.流式布局的实现4.1.1.测量4.1.2.布局 4.2针对需求优化流式布局4.2.1.测量4.2.2.布局 5.总结 1.前言 最近的版本呢&#xff0c;产品更新了一个直播间的需求&#xff0c;原本直播间的…

蓝库云|企业如何建立自己的供应商管理系统?零代码工具带来惊喜

在面对采购的物品和服务比较复杂多样的企业&#xff0c;都需要管理大量的供应商&#xff0c;因此需要更加有效和专业的供应商管理系统。随着数字化转型的意识不断增强&#xff0c;中小型企业也越来越意识到采用供应商系统的必要性&#xff0c;以提高采购效率和质量&#xff0c;…

LangChain 使用文本描述的方式操作MySQL中的数据

一、LangChain 使用文本描述的方式操作MySQL中的数据 在 LangChain 中提供了 SQLDatabaseChain &#xff0c;可以通过语义文本去操作 MySQL中的数据&#xff0c;例如在 MySQL 中有如下表数据&#xff1a; 用户表 CREATE TABLE user (id int NOT NULL AUTO_INCREMENT COMMENT…

HTML5 Canvas动画实例

在开发在线游戏时&#xff0c;绘制动画是非常重要的。本文介绍一个使用Canvas API实现的动画实例——游戏人物的跑步动画。 01、动画的概念及原理 1、动画 动画是通过一幅幅静止的、内容不同的画面(即帧)快速播放来呈现的&#xff0c;使人们在视觉上产生动的感觉。这是利用了…

如何让VSCode不生成 tempcoderunnerfile.py

原因 runcode插件默认包含执行选中文本功能&#xff0c;当运行程序时会优先执行光标选中的代码并生成temp文件 解决方法 方法一&#xff1a;删除生成文件 在setting.json中添加 "code-runner.executorMap": {"php": "php $fullFileName &&am…

【Linux】Ubuntu20.04使用xrdp远程桌面时,gnome桌面环境没有最小化、任务栏等问题

一、问题背景 如下图所示&#xff0c;终端窗口没有最小化&#xff0c;因此只能关闭或移到一边去。 二、解决办法 在安装任何扩展前&#xff0c;需要将xrdp的桌面尽量向原生桌面靠拢。 在~/.xsessionrc配置文件中添加下面三行。 export GNOME_SHELL_SESSION_MODEubuntu ex…

Mediapipe 人像分割;实时更换背景;人脸添加特效

参考&#xff1a; https://zhuanlan.zhihu.com/p/476351994 1、Mediapipe 人像分割 import cv2 import mediapipe as mp import numpy as np mp_drawing mp.solutions.drawing_utils mp_selfie_segmentation mp.solutions.selfie_segmentation # 图片人物抠图: IMAGE_FILES…

idea生成serialVersionUID序列号

设置idea file->settings,搜索serialVersionUID&#xff0c;勾选框起来的两项 实体类实现Serializable接口 Data public class User implements Serializable { }鼠标放到类名上 点击提示的uid 生成的uid 结束&#xff01; hy:17 生活是一面镜子&#xff0c;给予我们…

springboot 停车场管理系统-计算机毕设 附源码82061

springboot 停车场管理系统 2023年5月 摘要 由于数据库和数据仓库技术的快速发展&#xff0c;停车场管理系统建设越来越向模块化、智能化、自我服务和管理科学化的方向发展。停车场管理系统对处理对象和服务对象&#xff0c;自身的系统结构&#xff0c;处理能力&#xff0c;都…