- 浏览: 108626 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
土豆蛋儿:
我想读取一个外部文件,以什么方式好了? 文件内容经常编辑
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 733环境配置: hadoop-2.0.0-cdh4.3.0 (4 ... -
hive 数据倾斜
2014-08-27 09:03 642链接:http://www.alidata.org/archi ... -
hive 分通总结
2014-08-27 08:42 541总结分析: 1. 定义了桶,但要生成桶的数据,只能是由其他表 ... -
深入了解Hive Index具体实现
2014-08-25 08:51 701索引是标准的数据库技术,hive 0.7版本之后支持索引。hi ... -
explain hive index
2014-08-24 16:44 1117设置索引: 使用聚合索引优化groupby操作 hive> ... -
Hive 中内部表与外部表的区别与创建方法
2014-08-15 17:11 723分类: Hive 2013-12-07 11:56 ... -
hive map和reduce的控制
2014-08-15 16:14 596一、 控制hive任务中的map数: 1. 通 ... -
hive 压缩策略
2014-08-15 15:16 1727Hive使用的是Hadoop的文件 ... -
hive 在mysql中创建备用数据库
2014-08-15 09:21 838修改hive-site.xml <property> ... -
HIVE 窗口及分析函数
2014-08-11 16:21 1151HIVE 窗口及分析函数 使 ... -
hive 内置函数
2014-08-11 09:06 30251.sort_array(): sort_array(arra ... -
hive lateral view
2014-08-09 14:59 1987通过Lateral view可以方便的将UDTF得到的行转列的 ... -
hive数据的导出
2014-07-28 21:53 417在本博客的《Hive几种数据导入方式》文章中,谈到了Hive中 ... -
hive自定义InputFormat
2014-07-25 09:13 817自定义分隔符 package com.lwz.inputf; ... -
HiveServer2连接ZooKeeper出现Too many connections问题的解决
2014-07-24 08:49 1690HiveServer2连接ZooKeeper出现Too man ... -
hive 常用命令
2014-07-17 22:22 6381.hive通过外部设置参数传入脚本中: hiv ... -
CouderaHadoop中hive的Hook扩展
2014-07-16 21:18 3259最近在做关于CDH4.3.0的hive封装,其中遇到了很多问题 ... -
利用SemanticAnalyzerHook回过滤不加分区条件的Hive查询
2014-07-16 16:43 1420我们Hadoop集群中将近百分之80的作业是通过Hive来提交 ... -
hive 的常用命令
2014-07-16 10:07 0设置、查看hive当前的角色: set sys ... -
hive 授权
2014-07-15 10:51 897Hive授权(Security配置) 博客分类: Hive分 ...
相关推荐
hive udaf 实现按位取与或 hive udaf 实现按位取与或 hive 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 案例中,性能...
自定义 hive udf udaf 有url解析,获取网站主域名,根据ip获取区域码,有rownum,列聚合以及一些业务实现udf。
这是一些有用的 Hive UDF 和 UDAF 的集合。 提供的功能 UDAF Mode ( de.frosner.hive.udaf.Mode ) - 计算组列的统计模式 从源头构建 git clone https://github.com/FRosner/mustached-hive-udfs.git cd mustached...
hive所有函数 包括UDTs、UDAF、UDTF函数和运算符等,中文汉化,翻译并测试
hive常用函数,包括时间、类型、udf、udaf等等的归纳。
赵伟首先介绍了他们的TDW核心架构,HIVE,MapReduce,HDFS及PostgreSQL构成。赵伟分享了最核心的HIVE模块在TDW中的实践经验;HIVE是一个在Hadoop上构建数据仓库的软件,它...实现了基本的SQL功能,可扩充UDF/UDAF...
Spark Hive UDF示例 建立项目 mvn clean package 将spark-hive-udf-1.0.0-SNAPSHOT.jar复制到边缘节点临时目录 spark-hive-udf]# cp target/spark-hive-udf-1.0.0-SNAPSHOT.jar /tmp 通过提供罐子来启动火花壳 spark...
Hive常用数据类型介绍,表创建,内外部表、分区分桶表介绍,hive内置函数,UDTF,UDAF函数介绍,hive数据的导入导出以及JDBC配置方法。详细介绍了hive一些函数的使用和应用。
=================适用于Apache Hive的DataSketches Java UDF / UDAF适配器请访问主要的以获取更多信息。 如果您有兴趣对此站点做出贡献,请参阅我们的页面以了解如何与我们联系。Hadoop Hive UDF / UDAF 请参阅Java...
Apache Hive(TM)数据仓库软件有助于查询和... HiveQL还可以使用自定义标量函数(UDF),聚合(UDAF)和表函数(UDTF)进行扩展。https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-standalone-metastore-3.0.0/
title: "使用 [通用] UDAF 计算两个数的线性回归系数"例如select s,regression(x,y) group by s;参考Hive U
hive-udfhive自定义函数主要实现hive3种自定义函数1,udf函数,主要用于处理一对一数据处理2,udtf函数,主要用于处理一对多数据处理2,udaf函数,主要用与处理多对一数据聚合处理
调用 FunctionRegistry.registerUDAF 注册udaf 调用FunctionRegistry.registerUDTF 注册udtf 3 打包 mvn clean package 4 上传相应jar包到$HIVE_HOME/auxlib目录下 让hive自动加载udf包(该过程只需要一次执行,目前...
本文来自于cnblogs,赘述了在工作中总结Hive的常用优化手段和在工作中使用Hive出现的问题。下面开始本篇文章的优化介绍:继续《那些年使用Hive踩过的坑》一文中...sum,count,max,min等UDAF,不怕数据倾斜问题,hadoop在map