`

UDAF实现一个自定义的求和函数

    博客分类:
  • Hive
 
阅读更多

转自:http://richie-hu.blog.sohu.com/141308974.html

 

 

Hive进行UDAF开发,相对要比UDF复杂一些,不过也不是很难。

请看一个例子

package org.hrj.hive.udf;

import org.apache.hadoop.hive.ql.exec.UDAFEvaluator;
import org.apache.hadoop.hive.serde2.io.DoubleWritable;

 

public class UDAFSum_Sample extends NumericUDAF {
    public static class Evaluator implements UDAFEvaluator {
        private boolean mEmpty;
        private double mSum;
        public Evaluator() {
            super();
            init();
        }

        public void init() {
            mSum = 0;
            mEmpty = true;
        }

        public boolean iterate(DoubleWritable o) {
            if (o != null) {
                mSum += o.get();
                mEmpty = false;
            }
            return true;
        }

        public DoubleWritable terminatePartial() {
            // This is SQL standard - sum of zero items should be null.
            return mEmpty ? null : new DoubleWritable(mSum);
        }

        public boolean merge(DoubleWritable o) {
            if (o != null) {
                mSum += o.get();
                mEmpty = false;
            }
            return true;
        }

        public DoubleWritable terminate() {
            // This is SQL standard - sum of zero items should be null.
            return mEmpty ? null : new DoubleWritable(mSum);
        }
    }
}

 

1.将java文件编译成Sum_Sample.jar

2.进入hive

hive> add jar Sum_sample.jar;

hive> create temporary function sum_test as 'com.hrj.hive.udf.UDAFSum_Sample';

hive> select sum_test(t.num) from t;

hive> drop temporary function sum_test;

hive> quit;

 

关于UDAF开发注意点:

1.需要import org.apache.hadoop.hive.ql.exec.UDAF以及org.apache.hadoop.hive.ql.exec.UDAFEvaluator,这两个包都是必须的

2.函数类需要继承UDAF类,内部类Evaluator实现UDAFEvaluator接口

3.Evaluator需要实现 init、iterate、terminatePartial、merge、terminate这几个函数

    1)init函数类似于构造函数,用于UDAF的初始化

    2)iterate接收传入的参数,并进行内部的轮转。其返回类型为boolean (在map机器上执行)

    3)terminatePartial无参数,其为iterate函数轮转结束后,返回乱转数据,iterate和terminatePartial类似于hadoop的Combiner (一个map上的所有iterate结束后执行函数terminatePartial)。

    4)merge接收terminatePartial的返回结果,进行数据merge操作,其返回类型为boolean (在reduce上执行)

    5)terminate返回最终的聚集函数结果

分享到:
评论

相关推荐

    hive udaf 实现按位取与或

    UDAF是一种特殊的用户自定义函数,它负责处理一组输入值并返回一个单一的输出值。与UDFs(用户自定义函数)不同,UDAF通常涉及多步操作,包括初始化、累积和最终化等阶段,常用于统计分析和复杂计算。 二、按位逻辑...

    自定义hive函数

    你可以编写一个Java类,实现Hive的UDF接口,然后注册到Hive中,这样就可以在Hive SQL语句中调用这个函数,对URL字符串进行解析,提取出主域名部分。 例如,如果你有一个包含URL的字段,你可以创建一个UDF如下: ``...

    【SparkSql篇02】SparkSql之自定义UDF和UDAF函数1

    以下是一个计算平均值的自定义 UDAF 示例: ```scala class MyAvg extends UserDefinedAggregateFunction { override def inputSchema: StructType = StructType(StructField("inputColumn", DoubleType) :: Nil) ...

    Clickhouse之自定义函数

    这里,`polarisEventUserPath`是一个自定义函数,用于计算指定事件的用户路径分析。 6. **注意事项** - 在编写自定义函数时,需要考虑数据类型、性能优化以及兼容性问题。 - 自定义函数的输出通常需要进一步处理,...

    hive 创建自定义函数 和 hive加载说明

    1. 编写Java代码:你需要定义一个继承自Hive提供的AbstractUdf类的Java类,重写evaluate方法以实现你的函数逻辑。 2. 注解配置:在Java类上添加@Description注解,用于提供函数的元数据,如函数名、返回类型、参数...

    hive的自定义函数

    Hive支持三种类型的自定义函数:用户定义的函数(UDF)、用户定义的聚合函数(UDAF)和用户定义的表生成函数(UDTF)。本篇文章主要介绍UDF的实现方法。 ##### 2.1 UDF的作用 - **扩展性**:允许开发人员根据具体...

    hive自定义函数demo

    - **UDAF**: 多行聚合函数,如SUM、AVG,接收一组输入值,累积它们,然后返回一个单一的聚合结果。 - **UDTF**: 多行转换函数,一个输入行可以产生多行输出。 3. **开发Hive UDF** 开发Hive UDF通常涉及以下步骤...

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

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

    Hive的Udf函数进行数据脱敏

    要创建一个UDF,你需要编写一个Java类,该类需要继承Hive提供的`org.apache.hadoop.hive.ql.udf.generic.GenericUDF`抽象类,并实现其必需的方法。主要的方法有`evaluate()`,它接收输入参数并返回处理后的结果。 ...

    Hive自定义函数

    比如,我们想要实现一个名为`self_count`的自定义聚合函数,它模仿Hive内置的`count`函数,对一组数据进行计数。 #### 实现原理 UDAF的输入与输出比例为n:1,即它可以接收多条输入记录,并最终返回一个汇总的结果。...

    hive常用函数

    在本文中,我们将深入探讨Hive的常用函数,包括时间函数、类型转换函数、用户自定义函数(UDF)以及用户自定义聚合函数(UDAF)等。 关系运算符是Hive中的基础函数,用于比较两个值是否相等。例如,A=B用于判断A...

    doris-udaf 源码包

    1. **UDAF接口**:这是开发自定义聚合函数的起点,Doris 提供了一套接口供用户实现,包括初始化、累积、合并和结果提取等方法。 2. **生命周期方法**: - `init()`: 初始化状态,用于创建并设置聚合函数的初始状态...

    hive-udf:hive自定义函数

    hive-udfhive自定义函数主要实现hive3种自定义函数1,udf函数,主要用于处理一对一数据处理2,udtf函数,主要用于处理一对多数据处理2,udaf函数,主要用与处理多对一数据聚合处理

    使用IDEA编写SparkSql自定义聚合函数——强类型Dataset(求平均值)

    我们创建一个`udaf`对象,将自定义聚合函数转换为可查询的列`avg_age`,并应用到数据集上。最后,通过`groupByKey`和`agg`方法进行分组和聚合操作,计算每个用户群体的平均年龄,并打印结果。 这个过程展示了如何...

    数据架构师第015节UDAF实战:实现udaf第16节数据说明和重要操作演示.mp4

    数据架构师第015节UDAF实战:实现udaf第16节数据说明和重要操作演示.mp4

    hive 函数大全

    10. **UDAF(用户自定义聚合函数)**:用于实现自定义的聚合操作,如统计特定条件下的数据个数。 11. **UDTF(用户自定义表生成函数)**:能够返回多行数据的函数,可以将一行数据转化为多行。 以上是Hive函数的...

    hive函数.docx

    - **`coalesce(expr1, expr2, ...)`**:返回第一个非空值 - **`nvl(expr1, expr2)`**:如果expr1为null,则返回expr2 #### 2.6 字符函数 字符函数用于文本字符串的操作,如: - **`length(string)`**:字符串长度...

    hive:个人配置单元 UDAF

    要使用它们,您需要加载 jar 文件,然后为每个要使用的函数创建一个临时函数: ADD JAR target/hive-1.0-SNAPSHOT.jar;CREATE TEMPORARY FUNCTION string_builder AS 'org.apache.hadoop.hive.ql.udf.generic....

    HIve UDF 说明书

    它不仅覆盖了Hive的内置操作符和函数,而且提供了创建和使用自定义UDF的深入指南,对于任何希望深入学习和使用Hive进行大数据处理和分析的开发者来说都是一个宝贵的资源。通过理解这些知识点,用户可以更加灵活地在...

Global site tag (gtag.js) - Google Analytics