- 浏览: 111896 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
土豆蛋儿:
我想读取一个外部文件,以什么方式好了? 文件内容经常编辑
flume 自定义source -
土豆蛋儿:
大神,您好。
flume 自定义source
package com.lwz.udaf;
import org.apache.hadoop.hive.ql.exec.UDAF;
import org.apache.hadoop.hive.ql.exec.UDAFEvaluator;
//1.此函数区分一条记录的方法,如果没有group by和where的检索,那么整个表的数据都会被作为一条数据,从而只会init()一次
//然后再把这条数据根据表里面的行数依次进行iterator(),再把iterator()方法返回的结果通过terminatePartial()返回,当再次
//进行iterator()时,结果就会累加,当最后通过terminate()返回,那么此条记录也就处理完成
//2.如果hql中有group by,那么整张表就会被分为几条记录,而且每次处理新记录前都会被init()一次,其余的每个步骤都和上一样
public class MyConcat extends UDAF {
public static class ConcatUDAFEvaluator implements UDAFEvaluator{
public static class PartialResult{
String result;
String delimiter;
}
private PartialResult partial;
//初始化每条记录
public void init() {
//每次初始化就是将partial置为空
partial = null;
}
//根据数据的行数轮转调用iterate方法
public boolean iterate(String id,String name,String deli){
if (name == null||id==null){
//如果传入的参数为空
return true;
}
if (partial == null){
//如果部分结果输出为空,说明是开始读入新的一条记录或者是第一条记录
partial = new PartialResult();
//给partial结果赋值
partial.result = new String("");
if( deli == null || deli.equals("") )
{
//如果分隔符为空或者为"",给partial赋予默认分隔符","
partial.delimiter = new String(",");
}
else
{
//如果分隔符不为空,则把传入的分隔符赋予partial的delimiter
partial.delimiter = new String(deli);
}
}
if ( partial.result.length() > 0 )
{
//如果partial的结果不为空,则在将结果加上分隔符
partial.result = partial.result.concat(partial.delimiter);
}
//将加上分隔符的结果和新传入进行整合
partial.result = partial.result.concat(name).concat(id);
return true;
}
//返回轮转的结果
public PartialResult terminatePartial(){
//将每条记录处理完的结果返回
return partial;
}
//合并terminatePartial()返回的结果
public boolean merge(PartialResult other){
if (other == null){
return true;
}
if (partial == null){
partial = new PartialResult();
partial.result = new String(other.result);
partial.delimiter = new String(other.delimiter);
}
else
{
if ( partial.result.length() > 0 )
{
partial.result = partial.result.concat(partial.delimiter);
}
partial.result = partial.result.concat(other.result);
}
return true;
}
//返回最终聚合的结果
public String terminate(){
return new String(partial.result);
}
}
}
•一下两个包是必须的import org.apache.hadoop.hive.ql.exec.UDAF和 org.apache.hadoop.hive.ql.exec.UDAFEvaluator
开发步骤
•函数类需要继承UDAF类,内部类Evaluator实UDAFEvaluator接口
•Evaluator需要实现 init、iterate、terminatePartial、merge、terminate这几个函数
a)init函数实现接口UDAFEvaluator的init函数。
b)iterate接收传入的参数,并进行内部的轮转。其返回类型为boolean。
c)terminatePartial无参数,其为iterate函数轮转结束后,返回轮转数据,terminatePartial类似于hadoop的Combiner。
d)merge接收terminatePartial的返回结果,进行数据merge操作,其返回类型为boolean。
e)terminate返回最终的聚集函数结果。
执行步骤
•执行求平均数函数的步骤
a)将java文件编译成Avg_test.jar。
b)进入hive客户端添加jar包:
hive>add jar /run/jar/Avg_test.jar。
c)创建临时函数:
hive>create temporary function avg_test 'hive.udaf.Avg';
d)查询语句:
hive>select avg_test(scores.math) from scores;
e)销毁临时函数:
hive>drop temporary function avg_test;
import org.apache.hadoop.hive.ql.exec.UDAF;
import org.apache.hadoop.hive.ql.exec.UDAFEvaluator;
//1.此函数区分一条记录的方法,如果没有group by和where的检索,那么整个表的数据都会被作为一条数据,从而只会init()一次
//然后再把这条数据根据表里面的行数依次进行iterator(),再把iterator()方法返回的结果通过terminatePartial()返回,当再次
//进行iterator()时,结果就会累加,当最后通过terminate()返回,那么此条记录也就处理完成
//2.如果hql中有group by,那么整张表就会被分为几条记录,而且每次处理新记录前都会被init()一次,其余的每个步骤都和上一样
public class MyConcat extends UDAF {
public static class ConcatUDAFEvaluator implements UDAFEvaluator{
public static class PartialResult{
String result;
String delimiter;
}
private PartialResult partial;
//初始化每条记录
public void init() {
//每次初始化就是将partial置为空
partial = null;
}
//根据数据的行数轮转调用iterate方法
public boolean iterate(String id,String name,String deli){
if (name == null||id==null){
//如果传入的参数为空
return true;
}
if (partial == null){
//如果部分结果输出为空,说明是开始读入新的一条记录或者是第一条记录
partial = new PartialResult();
//给partial结果赋值
partial.result = new String("");
if( deli == null || deli.equals("") )
{
//如果分隔符为空或者为"",给partial赋予默认分隔符","
partial.delimiter = new String(",");
}
else
{
//如果分隔符不为空,则把传入的分隔符赋予partial的delimiter
partial.delimiter = new String(deli);
}
}
if ( partial.result.length() > 0 )
{
//如果partial的结果不为空,则在将结果加上分隔符
partial.result = partial.result.concat(partial.delimiter);
}
//将加上分隔符的结果和新传入进行整合
partial.result = partial.result.concat(name).concat(id);
return true;
}
//返回轮转的结果
public PartialResult terminatePartial(){
//将每条记录处理完的结果返回
return partial;
}
//合并terminatePartial()返回的结果
public boolean merge(PartialResult other){
if (other == null){
return true;
}
if (partial == null){
partial = new PartialResult();
partial.result = new String(other.result);
partial.delimiter = new String(other.delimiter);
}
else
{
if ( partial.result.length() > 0 )
{
partial.result = partial.result.concat(partial.delimiter);
}
partial.result = partial.result.concat(other.result);
}
return true;
}
//返回最终聚合的结果
public String terminate(){
return new String(partial.result);
}
}
}
•一下两个包是必须的import org.apache.hadoop.hive.ql.exec.UDAF和 org.apache.hadoop.hive.ql.exec.UDAFEvaluator
开发步骤
•函数类需要继承UDAF类,内部类Evaluator实UDAFEvaluator接口
•Evaluator需要实现 init、iterate、terminatePartial、merge、terminate这几个函数
a)init函数实现接口UDAFEvaluator的init函数。
b)iterate接收传入的参数,并进行内部的轮转。其返回类型为boolean。
c)terminatePartial无参数,其为iterate函数轮转结束后,返回轮转数据,terminatePartial类似于hadoop的Combiner。
d)merge接收terminatePartial的返回结果,进行数据merge操作,其返回类型为boolean。
e)terminate返回最终的聚集函数结果。
执行步骤
•执行求平均数函数的步骤
a)将java文件编译成Avg_test.jar。
b)进入hive客户端添加jar包:
hive>add jar /run/jar/Avg_test.jar。
c)创建临时函数:
hive>create temporary function avg_test 'hive.udaf.Avg';
d)查询语句:
hive>select avg_test(scores.math) from scores;
e)销毁临时函数:
hive>drop temporary function avg_test;
发表评论
-
hive + hbase
2015-01-04 10:42 771环境配置: hadoop-2.0.0-cdh4.3.0 (4 ... -
hive 数据倾斜
2014-08-27 09:03 685链接:http://www.alidata.org/archi ... -
hive 分通总结
2014-08-27 08:42 574总结分析: 1. 定义了桶,但要生成桶的数据,只能是由其他表 ... -
深入了解Hive Index具体实现
2014-08-25 08:51 737索引是标准的数据库技术,hive 0.7版本之后支持索引。hi ... -
explain hive index
2014-08-24 16:44 1145设置索引: 使用聚合索引优化groupby操作 hive> ... -
Hive 中内部表与外部表的区别与创建方法
2014-08-15 17:11 761分类: Hive 2013-12-07 11:56 ... -
hive map和reduce的控制
2014-08-15 16:14 623一、 控制hive任务中的map数: 1. 通 ... -
hive 压缩策略
2014-08-15 15:16 1767Hive使用的是Hadoop的文件 ... -
hive 在mysql中创建备用数据库
2014-08-15 09:21 880修改hive-site.xml <property> ... -
HIVE 窗口及分析函数
2014-08-11 16:21 1187HIVE 窗口及分析函数 使 ... -
hive 内置函数
2014-08-11 09:06 30671.sort_array(): sort_array(arra ... -
hive lateral view
2014-08-09 14:59 2025通过Lateral view可以方便的将UDTF得到的行转列的 ... -
hive数据的导出
2014-07-28 21:53 442在本博客的《Hive几种数据导入方式》文章中,谈到了Hive中 ... -
hive自定义InputFormat
2014-07-25 09:13 861自定义分隔符 package com.lwz.inputf; ... -
HiveServer2连接ZooKeeper出现Too many connections问题的解决
2014-07-24 08:49 1764HiveServer2连接ZooKeeper出现Too man ... -
hive 常用命令
2014-07-17 22:22 6921.hive通过外部设置参数传入脚本中: hiv ... -
CouderaHadoop中hive的Hook扩展
2014-07-16 21:18 3332最近在做关于CDH4.3.0的hive封装,其中遇到了很多问题 ... -
利用SemanticAnalyzerHook回过滤不加分区条件的Hive查询
2014-07-16 16:43 1466我们Hadoop集群中将近百分之80的作业是通过Hive来提交 ... -
hive 的常用命令
2014-07-16 10:07 0设置、查看hive当前的角色: set sys ... -
hive 授权
2014-07-15 10:51 932Hive授权(Security配置) 博客分类: Hive分 ...
相关推荐
在“hive udaf 实现按位取与或”的场景中,我们主要探讨如何使用UDAF来实现数据的按位逻辑运算,如按位与(AND)和按位或(OR)。 一、Hive UDAF基本概念 UDAF是一种特殊的用户自定义函数,它负责处理一组输入值并...
A custom UDAF to group oncatenates all arguments from different rows into a single string.
个人 Hive UDAF 有一堆 Hive UDAF(用户定义的聚合函数)不在标准 Hive 分布中,因为它们可能会导致大型数据集的 OOM。 要使用它们,您需要加载 jar 文件,然后为每个要使用的函数创建一个临时函数: ADD JAR target...
本机 Spark-SQL,当前实现仅依赖于 Hive UDAF。 新的实现使用 Spark SQL 聚合。 虽然仍然支持 Hive UDAF。 在运行案例(例如 BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)和 UNBOUDED FOLLOWING 案例中,性能...
6. **存储过程(UDF,UDAF,UDTF)**:Hive支持用户自定义函数(UDF),用户定义聚合函数(UDAF)和用户定义表生成函数(UDTF),允许扩展Hive的功能。 7. **连接Hadoop生态系统**:Hive与Hadoop生态系统的其他组件...
开发者通常需要这些jar包来创建自定义的Hive UDF(用户自定义函数)或UDAF(用户自定义聚合函数)以扩展Hive的功能。这些jar包也用于在MapReduce、Tez或Spark等计算框架上运行Hive查询。 在Hive的不同版本之间,jar...
- UDAF(用户定义的聚合函数):用于处理一组输入值并返回单个值,如自定义平均值、众数等。 - UDTF(用户定义的表生成函数):将一行数据转换为多行,常用于数据拆分。 4. Hive参数调优: - 内存参数:如...
这些函数可以是单行输入单行输出的UDF,多行输入单行输出的UDF(UDAF,User Defined Aggregation Function),或者多行输入多行输出的UDTF(User Defined Table Generating Function)。 2. **Java编程**: Hive ...
首先,Hive提供了多种函数类型,包括用户定义函数(UDF)、用户定义聚合函数(UDAF)、用户定义表生成函数(UDTF)和宏。用户定义函数(UDF)是一个接受一个或多个行中的列作为参数,并返回一个值或对象的函数,例如...
Hive 的灵活性之一在于支持用户自定义函数(UDF),包括用户定义的单行函数(UDF)、用户定义的多行函数(UDAF)和用户定义的表函数(UDTF)。这些自定义函数允许开发者扩展Hive的功能,以满足特定的业务需求。 ...
Hive可以通过编写自定义函数(UDF, User Defined Function)、UDAF(UDAF, User Defined Aggregate Function)和UDTF(User Defined Table Generating Functions)扩展其功能,满足特定业务需求。 9. **Hive与HBase的...
6. **Hive的三种自定义函数(UDF、UDTF、UDAF)** - **UDF**:一对一函数,用于基本的数据转换。 - **UDTF**:一对多函数,会产生多行输出。 - **UDAF**:多对一函数,用于聚合操作,如COUNT、SUM。 7. **Hive的...
这是一些有用的 Hive UDF 和 UDAF 的集合。 提供的功能 UDAF Mode ( de.frosner.hive.udaf.Mode ) - 计算组列的统计模式 从源头构建 git clone https://github.com/FRosner/mustached-hive-udfs.git cd mustached...
- **UDAF(User Defined Aggregation Function)**:用于处理一组输入并返回单个值,例如自定义聚合操作。 通过学习以上内容,你将能够熟练掌握Hive的基本使用,包括创建和管理数据表,编写高效的查询语句,以及...
7. **存储过程(UDF/UDAF/UDTF)**:Hive支持用户自定义函数,包括UDF(单行函数)、UDAF(聚合函数)和UDTF(多行函数),以扩展其功能。 8. **Hive与MapReduce的关系**:Hive将HQL转换为一系列的MapReduce任务...
6. **Hive UDF(User Defined Functions)**:允许用户自定义函数来扩展Hive的功能,包括UDF(单行函数)、UDAF(聚合函数)和UDTF(多行函数)。 7. **Hive Web Interface (WebHive)**:一个基于Web的界面,让用户...
2. **可扩展性**:Hive允许用户自定义函数(UDF)、聚合函数(UDAF)和表函数(UDTF),这使得Hive具有高度的灵活性。 3. **批处理能力**:通过将SQL语句转换成MapReduce任务,Hive非常适合用于处理大规模数据集的...
5. **Hive UDF(用户自定义函数)**:Hive允许用户扩展其功能,自定义UDF、UDAF(用户自定义聚合函数)和UDTF(用户自定义转换函数),以处理特定的数据分析需求。 ### 0203 Hive 高级进阶 1. **Hive性能优化**:...
Hive支持用户自定义函数(UDF)、用户定义聚合函数(UDAF)和用户定义表函数(UDTF),这在处理复杂的数据分析需求时非常有用。源代码中包含了这些接口的定义,开发者可以根据需要编写自己的函数并集成到Hive中。 ...