使用Apache commons-maths3-3.6.1.jar包,在hive上执行获取最大值的操作
udf是对hive上的每行(单行)数据操作,现在我要实现对hive上的一列数据操作,udf函数已经满足不了我的要求了,使用udaf对hive的一列求最大值;
代码如下:
package com; import org.apache.hadoop.hive.ql.exec.UDAF;
import org.apache.hadoop.hive.ql.exec.UDAFEvaluator;
import org.apache.hadoop.io.FloatWritable;
import org.apache.commons.math3.stat.descriptive.rank.Max; public class MaxFloat extends UDAF{
public Object Max;
public static class MaxiNumberIntUDAFEvaluator implements UDAFEvaluator{
//最终结果
private FloatWritable result;
//负责初始化计算函数并设置它的内部状态,result是存放最终结果的
public void init() {
result=null;
}
//每次对一个新值进行聚集计算都会调用iterate方法
public boolean iterate(FloatWritable value)
{
if(value==null)
return false;
if(result==null)
result=new FloatWritable(value.get());
else{
Max max = new Max();
double[] values = new double[2];
values[0] = result.get();
values[1] = value.get();
result.set((float) max.evaluate(values));
// result.set(Math.max(result.get(), value.get()));
}
return true;
}
//Hive需要部分聚集结果的时候会调用该方法
//会返回一个封装了聚集计算当前状态的对象
public FloatWritable terminatePartial()
{
return result;
}
//合并两个部分聚集值会调用这个方法
public boolean merge(FloatWritable other)
{
return iterate(other);
}
//Hive需要最终聚集结果时候会调用该方法
public FloatWritable terminate()
{
return result;
}
}
}
按照这种格式写各种函数;
打成jar包(打jar包的步骤我之前的博客里有详细描述)
将jar包和测试数据导入linux
登入hive,执行以下操作:
结果如下:
源数据为:
0.33
1.33
0.27333
0.3
0.501
0.444
0.44
0.34496
0.33
0.3
0.292
0.667
总结:一开始,我以为udf可以,后面问其他同事,才知道原来udf只对hive单行数据进行处理,立马五脸懵逼,各种百度,没想到真找到了,感谢度娘。
使用Apache commons-maths3-3.6.1.jar包,在hive上执行获取最大值的操作的更多相关文章
- 打jar包在linux上执行
1.jar包插件 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>ma ...
- servlet相关 jar包位置 BAE上部署web应用
1手动编译servlet工程: 要编译servlet,则类路径classpath中必须包括Servlet API 的相关类,如果使用的web容器是Tomcat,则这些类通常封装在在tomcat的lib ...
- IDEA里如何多种方式打jar包,然后上传到集群
关于IDEA里如何多种方式打jar包,然后上传到集群的问题? 前期准备,就是在,IDEA里,maven来创建项目.这里不多赘述. 1)用maven项目来打包,我推荐这个. (强烈推荐,简单又快速) S ...
- eclipse项目从编程到打jar包到编写BashShell执行
eclipse项目从编程到打jar包到编写BashShell执行 一.创建Java项目,并编写项目(带额外jar包) 二.打jar包 三.编写BashShell执行 其中一以及二可以参考我的博客 Ec ...
- Java之基于Apache jar包的FTPClient上传
首先,准备工作: http://pan.baidu.com/s/1dD1Utwt 从以上链接下载Apache的jar包,并将其复制到工程的WEB-INF下的lib包里,在此,准备工作就已经完成了. 具 ...
- 不借助第三方jar包实现文件上传
假设实现文件上传难道非要借助第三方jar包(最经常使用的莫过于apache的commons-fileupload工具包)来实现吗?答案是否定的.以下通过样例演示在不借助第三方jar包的前提下怎样实现文 ...
- spring boot工程打成JAR包到服务器上运行
只需在项目的pom.xml中加入下面插件 <build> <plugins> <plugin> <groupId>org.springframework ...
- java类在eclipse上打jar包,Linux上成功运行的实例
1 eclipse下的java项目结构如下图所示: 2 打包的步骤如下: 3 修改minifest.mf文件: 4 .上传需要的三方jar包们和主类打的jar(案例是topV.jar)并且执行jav ...
- 通过Jenkins调用自动部署war包及jar包到服务器上的Shell脚本
1)部署war包#!/bin/bashif [ id>0];then echo"stopproject" kill −9 idelse echo "project ...
随机推荐
- Java白皮书(总结一些题目)
java基础 1. 简述JVM的运行原理? Java平台由Java 虚拟机和Java 应用程序接口搭建,Java语言则是进入这个平台的通道, 用Java语言编写并编译的程序可以运行在这个平台 ...
- 处理html换行问题
String.prototype.replaceAll = function (FindText, RepText) { regExp = new RegExp(FindText, "g&q ...
- Word 查找替换高级玩法系列之 -- 通配符大全B篇
未完 ...... 点击访问原文(进入后根据右侧标签,快速定位到本文)
- openjudge4979 - 海贼王之伟大航路 题解
原题链接 题目简要分析 N个点,从1号点到N号点求最短路径,且每个点都要遍历到.现在要你求出最优方案. 这道题看到后,首先的想法莫过于搜索.暴力了.这显然不太可能.而进一步思考,使用Floyed和Di ...
- Python如何获取系统大小端模式
1. 第一种方法导入sys模块: >>> import sys >>> >>> sys.byteorder 'little' >>&g ...
- python3:使用for循环打印九九乘法表
for i in range(1, 10): for j in range(1, i + 1): print(j, '*', i, '=', i * j, end=" ") #en ...
- pytest_命令行传参
前言 命令行参数是根据命令行选项将不同的值传递给测试函数,比如平常在cmd执行"pytest --html=report.html",这里面的”--html=report.html ...
- 精通Spring Boot
原 精通Spring Boot—— 第二十一篇:Spring Social OAuth 登录简介 1.什么是OAuth OAuth官网介绍是这样的: An open protocol to allow ...
- 关于MVC接收Ajax调用无法访问的问题
例如:下面代码有两个int类型的参数,如果Ajax调用时没有在data属性中为其赋值,AJAX会出500异常. public JsonResult GetList(int pageIndex, int ...
- URL不变的情况下,最实用的vue刷新当前页面,provide / inject 组合 方式实现vue页面刷新
原文:https://blog.csdn.net/Dream_xun/article/details/83024487 其他参考:https://blog.csdn.net/liyunkun888/a ...