`
乡里伢崽
  • 浏览: 111896 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

hive udaf

    博客分类:
  • hive
 
阅读更多
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;
  • 大小: 184.2 KB
分享到:
评论

相关推荐

    hive udaf 实现按位取与或

    在“hive udaf 实现按位取与或”的场景中,我们主要探讨如何使用UDAF来实现数据的按位逻辑运算,如按位与(AND)和按位或(OR)。 一、Hive UDAF基本概念 UDAF是一种特殊的用户自定义函数,它负责处理一组输入值并...

    Hive UDAF示例

    A custom UDAF to group oncatenates all arguments from different rows into a single string.

    hive:个人配置单元 UDAF

    个人 Hive UDAF 有一堆 Hive UDAF(用户定义的聚合函数)不在标准 Hive 分布中,因为它们可能会导致大型数据集的 OOM。 要使用它们,您需要加载 jar 文件,然后为每个要使用的函数创建一个临时函数: ADD JAR target...

    spark-window:Spark 窗口函数的实验

    本机 Spark-SQL,当前实现仅依赖于 Hive UDAF。 新的实现使用 Spark SQL 聚合。 虽然仍然支持 Hive UDAF。 在运行案例(例如 BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)和 UNBOUDED FOLLOWING 案例中,性能...

    apache-hive-2.3.9-bin.tar大数据HIVE.zip

    6. **存储过程(UDF,UDAF,UDTF)**:Hive支持用户自定义函数(UDF),用户定义聚合函数(UDAF)和用户定义表生成函数(UDTF),允许扩展Hive的功能。 7. **连接Hadoop生态系统**:Hive与Hadoop生态系统的其他组件...

    HIVE相关的jar包

    开发者通常需要这些jar包来创建自定义的Hive UDF(用户自定义函数)或UDAF(用户自定义聚合函数)以扩展Hive的功能。这些jar包也用于在MapReduce、Tez或Spark等计算框架上运行Hive查询。 在Hive的不同版本之间,jar...

    hive数仓、hive SQL 、 hive自定义函数 、hive参数深入浅出

    - UDAF(用户定义的聚合函数):用于处理一组输入值并返回单个值,如自定义平均值、众数等。 - UDTF(用户定义的表生成函数):将一行数据转换为多行,常用于数据拆分。 4. Hive参数调优: - 内存参数:如...

    hive UDF需要jar包

    这些函数可以是单行输入单行输出的UDF,多行输入单行输出的UDF(UDAF,User Defined Aggregation Function),或者多行输入多行输出的UDTF(User Defined Table Generating Function)。 2. **Java编程**: Hive ...

    Apache Hive Functions Cheat Sheet

    首先,Hive提供了多种函数类型,包括用户定义函数(UDF)、用户定义聚合函数(UDAF)、用户定义表生成函数(UDTF)和宏。用户定义函数(UDF)是一个接受一个或多个行中的列作为参数,并返回一个值或对象的函数,例如...

    自定义hive函数

    Hive 的灵活性之一在于支持用户自定义函数(UDF),包括用户定义的单行函数(UDF)、用户定义的多行函数(UDAF)和用户定义的表函数(UDTF)。这些自定义函数允许开发者扩展Hive的功能,以满足特定的业务需求。 ...

    apache-hive-1.2.1源码包(已编译)(含Hive的使用全解)

    Hive可以通过编写自定义函数(UDF, User Defined Function)、UDAF(UDAF, User Defined Aggregate Function)和UDTF(User Defined Table Generating Functions)扩展其功能,满足特定业务需求。 9. **Hive与HBase的...

    大数据面试 Hive 八股文

    6. **Hive的三种自定义函数(UDF、UDTF、UDAF)** - **UDF**:一对一函数,用于基本的数据转换。 - **UDTF**:一对多函数,会产生多行输出。 - **UDAF**:多对一函数,用于聚合操作,如COUNT、SUM。 7. **Hive的...

    mustached-hive-udfs:一些有用的 Hive UDF 和 UDAF

    这是一些有用的 Hive UDF 和 UDAF 的集合。 提供的功能 UDAF Mode ( de.frosner.hive.udaf.Mode ) - 计算组列的统计模式 从源头构建 git clone https://github.com/FRosner/mustached-hive-udfs.git cd mustached...

    Hive-工具篇_hive_

    - **UDAF(User Defined Aggregation Function)**:用于处理一组输入并返回单个值,例如自定义聚合操作。 通过学习以上内容,你将能够熟练掌握Hive的基本使用,包括创建和管理数据表,编写高效的查询语句,以及...

    Hive收集的电子文档

    7. **存储过程(UDF/UDAF/UDTF)**:Hive支持用户自定义函数,包括UDF(单行函数)、UDAF(聚合函数)和UDTF(多行函数),以扩展其功能。 8. **Hive与MapReduce的关系**:Hive将HQL转换为一系列的MapReduce任务...

    apache-hive-0.14.0-bin.tar.gz

    6. **Hive UDF(User Defined Functions)**:允许用户自定义函数来扩展Hive的功能,包括UDF(单行函数)、UDAF(聚合函数)和UDTF(多行函数)。 7. **Hive Web Interface (WebHive)**:一个基于Web的界面,让用户...

    尚硅谷大数据之Hive视频

    2. **可扩展性**:Hive允许用户自定义函数(UDF)、聚合函数(UDAF)和表函数(UDTF),这使得Hive具有高度的灵活性。 3. **批处理能力**:通过将SQL语句转换成MapReduce任务,Hive非常适合用于处理大规模数据集的...

    大数据系列-Hive

    5. **Hive UDF(用户自定义函数)**:Hive允许用户扩展其功能,自定义UDF、UDAF(用户自定义聚合函数)和UDTF(用户自定义转换函数),以处理特定的数据分析需求。 ### 0203 Hive 高级进阶 1. **Hive性能优化**:...

    hive1.2.2源代码

    Hive支持用户自定义函数(UDF)、用户定义聚合函数(UDAF)和用户定义表函数(UDTF),这在处理复杂的数据分析需求时非常有用。源代码中包含了这些接口的定义,开发者可以根据需要编写自己的函数并集成到Hive中。 ...

Global site tag (gtag.js) - Google Analytics