hive UDAF

java 程序

package com.ibeifeng.udaf;

import org.apache.hadoop.hive.ql.exec.UDAF;
import org.apache.hadoop.hive.ql.exec.UDAFEvaluator;

public class Wm_concat extends UDAF {

    public static class MYUDAFVAL implements UDAFEvaluator{

        private PartialResult partial = new PartialResult();
        public static class PartialResult{
            String result = "";
            String delilmiter = null;
        }
        @Override
        public void init() {
            // TODO 自动生成的方法存根
            partial.result = "";

        }
        public boolean iterate(String value, String deli){
             if(value == null || "null".equalsIgnoreCase(value)){
                 return true;
             }
             if(partial.delilmiter == null){
                 partial.delilmiter = deli;

             }
             if(partial.result.length() > 0){

                 partial.result = partial.result.concat(partial.delilmiter);

             }

             partial.result = partial.result.concat(value);

             return true;

        }

        public PartialResult terminatePartial(){

            return partial;
        }

        public boolean merge(PartialResult other){

             if(other == null)
                 return true;
              if(partial.delilmiter == null){
                  partial.delilmiter = other.delilmiter;
                  partial.result = other.result;
              }else{
                  if(partial.result.length()>0){
                      partial.result = partial.result.concat(partial.delilmiter);

                  }
                  partial.result = partial.result.concat(other.result);

              }
              return true;

        }
        public String terminate(){

            if(partial == null || partial.result == null){

                return null;
            }
            return partial.result;
        }
    }

}
时间: 2024-10-19 06:00:02

hive UDAF的相关文章

Hive UDAF开发详解

说明 这篇文章是来自Hadoop Hive UDAF Tutorial - Extending Hive with Aggregation Functions:的不严格翻译,因为翻译的文章示例写得比较通俗易懂,此外,我把自己对于Hive的UDAF理解穿插到文章里面. udfa是hive中用户自定义的聚集函数,hive内置UDAF函数包括有sum()与count(),UDAF实现有简单与通用两种方式,简单UDAF因为使用Java反射导致性能损失,而且有些特性不能使用,已经被弃用了:在这篇博文中我们

HIVE UDAF开发上手,你一看就懂!

单机跑一个脚本做数据处理,但是由于输入数据实在太大,处理过程中占用大量内存经常被系统杀死,所以考虑放在hive中做数据聚合.借此机会研究下UDAF怎么写,把踏坑的经验写出来,希望可以帮助大家少走弯路!嗯...就酱紫. 经常听UDF,那么UDAF是什么鬼? 就是聚合功能的UDF啦~  比如hive内置的 count.sum.max.min.avg等. 但是内置的函数其实并不能满足我们复杂的统计需求,就需要自己去实现一个方法. 有两种实现方法,一种简单的,一种通用的,简单的方法据说有性能问题,我们就

hive udaf 用maven打包运行create temporary function 时报错

用maven打包写好的jar,在放到hive中作暂时函数时报错. 错误信息例如以下: hive> create temporary function maxvalue as "com.leaf.data.Maximum"; java.lang.SecurityException: Invalid signature file digest for Manifest main attributes at sun.security.util.SignatureFileVerifier

hive udaf 用maven打包执行create temporary function 时报错

用maven打包写好的jar,在放到hive中作临时函数时报错. 错误信息如下: hive> create temporary function maxvalue as "com.leaf.data.Maximum"; java.lang.SecurityException: Invalid signature file digest for Manifest main attributes at sun.security.util.SignatureFileVerifier.p

Hive自定义函数UDAF开发

Hive支持自定义函数,UDAF是接受多行,输出一行. 通常是group by时用到这种函数. 其实最好的学习资料就是官方自带的examples了. 我这里用的是0.10版本hive,所以对于的examples在 https://github.com/apache/hive/tree/branch-0.10/contrib/src/java/org/apache/hadoop/hive/contrib/udaf/example 我这里的功能需求是: actionCount(act_code,ac

Hive 自定义函数 UDF UDAF UDTF

UDF:用户定义(普通)函数,只对单行数值产生作用: 继承UDF类,添加方法 evaluate() /** * @function 自定义UDF统计最小值 * @author John * */ public class Min extends UDF { public Double evaluate(Double a, Double b) { if (a == null) a = 0.0; if (b == null) b = 0.0; if (a >= b) { return b; } el

Hive入门到剖析(二)

5 Hive参数 hive.exec.max.created.files 说明:所有hive运行的map与reduce任务可以产生的文件的和 默认值:100000 hive.exec.dynamic.partition 说明:是否为自动分区 默认值:false hive.mapred.reduce.tasks.speculative.execution 说明:是否打开推测执行 默认值:true hive.input.format 说明:Hive默认的input format 默认值: org.a

Hive中分组取前N个值

分享两篇文章,结合看更清楚一点. 背景 假设有一个学生各门课的成绩的表单,应用hive取出每科成绩前100名的学生成绩. 这个就是典型在分组取Top N的需求. 解决思路 对于取出每科成绩前100名的学生成绩,针对学生成绩表,根据学科,成绩做order by排序,然后对排序后的成绩,执行自定义函数row_number(),必须带一个或者多个列参数,如ROW_NUMBER(col1, ....),它的作用是按指定的列进行分组生成行序列.在ROW_NUMBER(a,b) 时,若两条记录的a,b列相同

Pig、Hive、MapReduce 解决分组 Top K 问题(转)

问题: 有如下数据文件 city.txt (id, city, value) cat city.txt 1 wh 5002 bj 6003 wh 1004 sh 4005 wh 2006 bj 1007 sh 2008 bj 3009 sh 900需要按 city 分组聚合,然后从每组数据中取出前两条value最大的记录. 1.这是实际业务中经常会遇到的 group TopK 问题,下面来看看 pig 如何解决: 1 a = load '/data/city.txt'  using PigSto