hive0.13的自定义UDTF函数的应用
代码的编写
/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.csm.data.udf.hive; import java.util.ArrayList; import org.apache.hadoop.hive.ql.exec.Description; import org.apache.hadoop.hive.ql.exec.UDFArgumentException; import org.apache.hadoop.hive.ql.metadata.HiveException; import org.apache.hadoop.hive.ql.udf.generic.GenericUDTF; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory; import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory; /** * 将一个字段,它的值为 * 流行|90后|粤语| * 这样的字段,转换为 * 流行 * 90后 * 粤语 * 这样的三行 * 本方法只能支持 * select csm_explode(tag) from t_test这种单字段的形式 * */ @Description(name = "csm_explode", value = "_FUNC_(a) - separates the elements of string with '|' into multiple rows") public class CSMUDTFExplode extends GenericUDTF { @Override public void close() throws HiveException { } @Override public StructObjectInspector initialize(ObjectInspector[] args) throws UDFArgumentException { if (args.length != 1) { throw new UDFArgumentException("csm_explode() takes only one argument"); } ArrayList<String> fieldNames = new ArrayList<String>(); ArrayList<ObjectInspector> fieldOIs = new ArrayList<ObjectInspector>(); //返回的新列的字段名称 fieldNames.add("tag"); fieldOIs.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector); return ObjectInspectorFactory.getStandardStructObjectInspector( fieldNames, fieldOIs); } @Override public void process(Object[] o) throws HiveException { String input = o[0].toString(); String[] test = input.split("\\|"); //forward处理一个数组,每个数组作为一行返回,每个数组里的元素作为一列 for(int i =0 ;i < test.length;i ++){ String[] tag = {test[i]}; forward(tag); } } @Override public String toString() { return ""; } }
这个自定义函数最好是打包成一个单独的jar包,这个jar包需要指定一个有main函数的类作为默认的入口,虽然这个类用不上
写了一个ATest作为有main函数的类
作为java application运行一下
运行结果不重要,只要确定main函数有效就可以了
导出Jar包:
这里选择导出为runnable jar包
指定刚刚定义的main函数类作为jar包的默认入口
忽略这个警告:
导出的jar包,这里依赖的jar包是不需要上传到有Hadoop环境的服务器上
使用scp工具上传jar包
原始的Hive表数据:
注册自定义函数为临时函数
使用该自定义函数
相关推荐
hive安装
### Hadoop2.2.0 + HBase0.98.1 + Sqoop1.4.4 + Hive0.13 完全安装手册 #### 前言 随着大数据技术的发展,Hadoop已经成为处理海量数据的核心框架之一。本文旨在为读者提供一套最新的Hadoop2.2.0、HBase0.98.1、...
此Hive UDTF将复制第一个输入列 一种。 如何制作罐子 mvn package ## b。 准备一个带有示例数据的Hive表 在Hive CLI中,创建测试表: create table testudtf (a string, b string) ROW FORMAT DELIMITED FIELDS ...
可以通过Hive命令行界面使用`ADD JAR`语句来临时引入JAR,或者将其放在Hive的lib目录下使其全局可用。 5. **注册UDF**: 在Hive会话中,使用`CREATE TEMPORARY FUNCTION`或`CREATE FUNCTION`语句注册UDF。临时函数...
hive 0.13版本使用orcfile报错,自己用mavn重新编译的hive-exec-0.13.1.jar,替换lib下的包即可正常使用orcfile
当进行JOIN操作时,如果两个表在JOIN键上使用了相同的分桶策略,Hive可以使用更高效的MapReduce算法,提升查询效率。 “各种表创建SQL”这部分将详细讲解CREATE TABLE语句的各种用法,包括创建基本表、分区表、分桶...
《Hive metastore 使用达梦数据库存储元数据详解》 在大数据处理领域,Hive作为一个分布式数据仓库工具,被广泛用于存储和管理大规模结构化数据。Hive的元数据是其核心组成部分,它包含了表、分区、列等信息,使得...
这时一个关于hive的文档类。主要内容包括一些安装以及一些例子
JDBC/ODBC 是 Hive 的Java,与使用传统数据库JDBC的方式类似 WebGUI是通过浏览器访问 Hive 本文主要介绍的就是第二种用户接口,直接进入正题。 1、Hive 安装: 1)hive的安装请参考网上的相关文章,测试时只在...
8. **Hive UDFs (User Defined Functions)**:Hive 允许用户编写自定义函数(UDFs)以扩展其内置功能,包括UDAF(用户定义的聚合函数)和 UDTF(用户定义的表生成函数)。 9. **ACID Transactions**:从 Hive 0.13 ...
具体来说,这个例子将演示如何使用PHP客户端与Hive Server2(Hive的第二代网络服务接口)进行通信,这个过程通常涉及到以下几个关键步骤: 1. **安装和配置Thrift**:首先,你需要在PHP环境中安装Thrift库。这可以...
"使用IDEA工具连接CDH集群里面的hive组件" 使用IDEA工具连接CDH集群里面的hive组件是数据开发中的一项重要任务。本文将详细介绍如何使用IDEA工具连接CDH集群里面的hive组件,包括建立java工程项目、添加hive开发的...
在大数据处理领域,Apache Hive是一个基于Hadoop的数据仓库工具,它允许用户使用SQL(HQL,Hive Query Language)查询和管理存储在Hadoop分布式文件系统(HDFS)中的大量结构化数据。本教程将详细介绍如何安装Hive,...
9. **ACID Transactions**:从Hive 0.13版本开始,Hive支持ACID(原子性、一致性、隔离性和持久性)事务,提供了对数据更新和删除的支持,增强了数据的一致性。 10. **Hive on Spark**:虽然在2.1.0版本中,Hive...
Hive是一个基于Hadoop的数据仓库工具,它允许用户使用SQL语言处理存储在HDFS(Hadoop Distributed File System)上的大规模数据集。 描述 "既可以连接没有kerberos的hive也可以连接有kerberos的hive" 暗示了这些...
连接Hive通常通过Hive Shell或使用其他支持Hive的客户端如Beeline、Hue等。要连接Hive,你需要知道Hive服务器的地址、端口以及认证方式(如果有的话)。 2. **Hive支持的数据类型** - **原子数据类型** 包括:INT...
* 数据存储:HIVE使用Hadoop分布式文件系统(HDFS)存储数据,而传统数据库使用关系数据库管理系统(RDBMS) * 数据处理:HIVE使用MapReduce处理数据,而传统数据库使用SQL查询 * 扩展性:HIVE具有高可扩展性,可以...
Hive可以通过编写自定义函数(UDF, User Defined Function)、UDAF(UDAF, User Defined Aggregate Function)和UDTF(User Defined Table Generating Functions)扩展其功能,满足特定业务需求。 9. **Hive与HBase的...
4. **配置 Spark Session**:在创建 SparkSession 时,可以通过 `enableHiveSupport()` 方法启用对 Hive 的支持,这样可以确保 Spark 能够访问 Hive 元数据和服务,从而能够使用 Hive UDF。 ```java SparkSession ...
- Hive 0.13版本及以后支持创建永久函数。 - 如果修改了Java代码并重新打包上传了新的JAR文件,需要退出当前的Hive会话重新进入,并再次创建函数,以确保加载的是最新的JAR文件。 通过以上步骤,可以有效地扩展Hive...