hive自定义udf函数,在udf函数内怎么读取hive表数据

15005153460 15005153460 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我想实现一个udf函数,传入一个参数,去读取hive自己的表数据进行业务测试


package com.hive;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.hive.ql.exec.persistence.BytesBytesMultiHashMap.Result;
import org.apache.hadoop.io.Text;

public class ConnHive extends UDF{

public Text evaluate(Text input) throws Exception
{
String driver="org.apache.hadoop.hive.jdbc.HiveDriver";
String url = "jdbc:hive://192.168.175.129:10000";
String userName = "";
String passWord = "";
String sql = "select name from test where id = "+Integer.parseInt(input.toString());
Class.forName(driver);
Connection con = DriverManager.getConnection(url,userName,passWord);
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);
StringBuffer sbf = new StringBuffer();

while(rs.next())
{
sbf.append(rs.getString(1)).append("|");
}
return new Text(sbf.toString().substring(0, sbf.length()-1));
}

}


测试表和数据
create table test
(
id int ,
name string
)
comment 'test'
row format delimited
fields terminated by '\t'
stored as textfile;

12 abc
345 cde
678 def


报错结果:
hive> select t.name,connhive(123) from ymdd.test t;
FAILED: SemanticException [Error 10014]: Line 1:14 Wrong arguments '123': org.apache.hadoop.hive.ql.metadata.HiveException: Unable to execute method public org.apache.hadoop.io.Text com.hive.ConnHive.evaluate(org.apache.hadoop.io.Text) throws java.lang.Exception on object com.hive.ConnHive@3ad8e7 of class com.hive.ConnHive with arguments {123:org.apache.hadoop.io.Text} of size 1


Text类在hadoop-common-2.6.1.jar中已经add jar操作了


...全文

相关推荐

Hive实现UDF自定义函数

前面讲过很多函数,今天就说下UDF自定义函数 编写UDF有两种方式 1.继承 UDF , 重写evaluate方法 2.继承 GenericUDF,重写initialize、getDisplayString、evaluate方法 先说下第一种方式: 下载依赖包到pom.xml <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId&

天ヾ道℡酬勤

Hive的UDF编程之GenericUDF编程

Hive编程指南的GenericUDF,GenericUD可以接受负责数据类型的数据参数输入,这里我们使用的是输入数组,判断数组中是否包含某个值

xipenfei

Hive的UDF实现及注意事项

Hive自身查询语言HQL能完成大部分的功能,但遇到特殊需求时,需要自己写UDF实现。以下是一个完整的案例。 1、eclipse中编写UDF ①项目中加入hive的lib下的所有jar包和Hadoop中share下hadoop-common-2.5.1.jar(Hadoop目前最新版本2.5.1)。 ②UDF类要继承org.apache.hadoop.hive.ql.exec.UDF类,类中

古韦

spark中DataFrame读取hive之UDF函数去掉空行

import org.apache.spark.sql.SparkSessionval spark = SparkSession.builder().master("spark://192.168.0.0:7077").enableHiveSupport().getOrCreate()val sc = spark.sparkContextval sqlContext = spark.sqlCon...

ailyfm

Hive中的自定义函数UDF的实现过程说明记录

1. 引言 近期在学习大数据的过程中,使用了CDH版本的Hadoop、Hive等,将编写Hive自定义函数UDF的过程记下来,以备查看和参考。 2. 环境准备 开发环境:JDK1.8、IEDA 2018.3.5 操作环境:安装了CDH版本的大数据组件的Linux系统(虚拟机),包括了Hadoop、Hive、Sqoop 3. 实现过程 3.1 搭建IDEA开发环境 (1)贴上pom.x...

「已注销」
评论
收藏 已收藏
分享
返回顶部
15005153460
数据仓库 7,394 成员 6,741 内容