`
sunasheng
  • 浏览: 119238 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Hive的UDF和UDAF编程实例

阅读更多

1.UDF

UDF类必须继承org.apache.hadoop.hive.ql.exec.UDF类,并且实现evaluate方法

1.建立工程

2.导入hive和hadoop的jar包

3.编写代码

        

public class lower_Or_UpperCase extends UDF
	{
		//实现至少一个evaluate方法
		public Text evaluate(Text t,String up_or_lower)
		{
			if(t==null)
			{
				return null;
			}
			//依据标识的参数转换大小写
			else if(up_or_lower.equals("lowercase"))
			{
				return new Text(t.toString().toLowerCase());
			}
			else if(up_or_lower.equals("uppercase"))
		    {
				return new Text(t.toString().toUpperCase()) 
			}
			else
		    {
				return null;
		    }
		}
	}

        4.检查代码无误后打成jar包,名字为uporlower.jar,放置到/home/dengpeng下

5.进入Hive的shell,用add jar命令把jar包导入到Hive的环境变量下,用create temporary function as命令基于jar包中的类创建临时的函数,之后就可以在查询中使用函数了

hive>add jar /home/dengpeng/uporlower.jar

hive>create temporary function uporlower as 'com.cstore.lower_Or_UpperCase';

6.最后可以把不再需要的函数进行销毁

hive>drop temporary funtion uporlower;

2.UDAF

UDAF类必须继承自org.apache.hadoop.hive.ql.exec.UDAF类,并且实现接口org.apache.hadoop.hive.ql.exec.UDAFEvaluator;

接口有5个方法:init  iterate  terminatePartial  merge  terminate

       

public class GeometricMean extends UDAF
	{
		public static class midResult
		{
			public long numCount;
			public double multSum;
		}
		public static class GMEvaluator implements UDAFEvaluator
		{
			midResult midr;
			public GMEvaluator()
			{
				super();
				midr = new minResult();
				init();
			}
			public void init()//对中间结果实现初始化
			{
				midr.multSum = 1;
				midr.numCount = 0;
			}
			public boolean iterate(IntWritable a)//接受传入的参数,并进行内部的轮转
			{
				if(a!=null)
				{
					midr.multSum*=a.get();
					midr.numCount++;
				}
				return true;
			}
			public midResult terminatePartial()//负责返回iterate函数轮转后的数据
			{
				return midr.numCount==0?null:midr;
			}
			public boolean merge(midResult b)//接受terminatePartial的返回结果,合并接受的中间值
			{
				if(b!=null)
				{
					midr.numCount*=b.numCount;
					midr.nultSum+=b.multSum;
				}
				return true;
			}
			public Double terminate()//返回最终的结果
			{
				return midr.numCount==0?null:Math.pow(midr.multSum,1.0/midr.numCount);
			}
		}
	}

 

分享到:
评论

相关推荐

    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...

    javasql笔试题-spark-hive-udf:展示如何在ApacheSpark中使用HiveUDF的示例项目

    和 DataFrames 一起使用。 用 Python 编写的原生 Spark UDF 很慢,因为它们必须在 Python 进程中执行,而不是基于 JVM 的 Spark Executor。 要让 Spark Executor 运行 Python UDF,它必须: 将数据从分区发送到与 ...

    自定义hive函数

    自定义 hive udf udaf 有url解析,获取网站主域名,根据ip获取区域码,有rownum,列聚合以及一些业务实现udf。

    hive:个人配置单元 UDAF

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

    hive-udf-tools:hive udf 部署工具,开发工具...

    hive-udf-hook UDF开发及发布过程 1 用户编写UDF实现类 2 编写完成后,在UDFHooks类中调用相关注册函数: 调用 FunctionRegistry.registerUDF 注册udf 调用 FunctionRegistry.registerUDAF 注册udaf 调用...

    datasketches-hive:Hive的草图适配器

    =================适用于Apache Hive的DataSketches Java UDF / UDAF适配器请访问主要的以获取更多信息。 如果您有兴趣对此站点做出贡献,请参阅我们的页面以了解如何与我们联系。Hadoop Hive UDF / UDAF 请参阅Java...

    hive常用函数

    hive常用函数,包括时间、类型、udf、udaf等等的归纳。

    赵伟:HIVE在腾讯分布式数据仓库实践

    赵伟首先介绍了他们的TDW核心架构,HIVE,MapReduce,HDFS及PostgreSQL构成。赵伟分享了最核心的HIVE模块在TDW中的实践经验;HIVE是一个在Hadoop上构建数据仓库的软件,它...实现了基本的SQL功能,可扩充UDF/UDAF...

    hive-udf:hive自定义函数

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

    hive

    Apache Hive(TM)数据仓库软件有助于查询和... HiveQL还可以使用自定义标量函数(UDF),聚合(UDAF)和表函数(UDTF)进行扩展。https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-standalone-metastore-3.0.0/

    Hadoop权威指南(中文版)2015上传.rar

    Hadoop和Hive在Facebook的应用 概要介绍 Hadoop a Facebook 假想的使用情况案例 Hive 问题与未来工作计划 Nutch 搜索引擎 背景介绍 数据结构 Nutch系统利用Hadoop进行数据处理的精选实例 总结 Rackspace的日志处理 ...

    Spark:Apache Spark是一个快速的内存数据处理引擎,具有优雅且富有表现力的开发API,可让数据工作者高效执行需要快速迭代访问数据集的流,机器学习或SQL工作负载。该项目将在Scala中提供Spark的示例程序语

    使用Spark-2.1实现自定义UDF,UDAF,Partitioner 使用数据框(ComplexSchema,DropDuplicates,DatasetConversion,GroupingAndAggregation) 使用数据集处理Parquet文件按特定列对数据进行分区并按分区进行存储使用...

    Hadoop权威指南 第二版(中文版)

     Hadoop和Hive在Facebook的应用  概要介绍  Hadoop a Facebook  假想的使用情况案例  Hive  问题与未来工作计划  Nutch 搜索引擎  背景介绍  数据结构  Nutch系统利用Hadoop进行数据处理的精选实例  总结...

    大数据场景化解决方案.pdf

    数据处理与分析: 利⽤分布式并⾏编程模型和计算框架,结合机器学习和数据挖掘算法,实现对海量数据的处理和分析。 3.场景化解决⽅案 在⾯对不同的场景时,会使⽤不同的⼤数据组件去解决处理,主要有如下⼤数据场景...

    蜂巢:Apache蜂巢

    HiveSQL也可以通过用户定义的函数(UDF),用户定义的集合(UDAF)和用户定义的表函数(UDTF)扩展为用户代码。 Hive用户在执行SQL查询时可以选择3种运行时。 用户可以选择Apache Hadoop MapReduce,Apache Tez或...

    hadoop_the_definitive_guide_3nd_edition

    Writing a UDAF 451 13. HBase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457 HBasics 457 Backdrop 458 Concepts 458 ...

Global site tag (gtag.js) - Google Analytics