IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Inceptor UDF -> 正文阅读

[大数据]Inceptor UDF

package io.transwarp.inceptorudaf;

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

public class InceptorUDAF extends UDAF {
? ? /*
? ? ?* 在实现inceptor自定UDAF时,必须要继承UDAF类,还有在这个类的内部实现一个内部类实现接口UDAFEvaluator
? ? ?* 并重写里面的四个主要的方法
? ? ?*
? ? ?* 1. Iterate函数用于聚合。当每一个新的值被聚合时,此函数被调用。
? ? ?* 2. TerminatePartial函数在部分聚合完成后被调用。当hive希望得到部分记录的聚合结果时,此函数被调用。
? ? ?* 3. Merge函数用于合并先前得到的部分聚合结果(也可以理解为分块记录的聚合结果)。
? ? ?* 4. Terminate返回最终的聚合结果。
? ? ?*
? ? ?* 下面代码的逻辑要实现的是:
? ? ?* 1.保存fields3的第一次出现的任何值
? ? ?* 2.保存fields4的最后一个值
? ? ?* 3.保存fields5的最后一个非空非null的有效值
? ? ?* 4.将fields6的所有非空非null的有效值使用分隔符连接起来
? ? ?* 5.返回结果是“第一次出现的fields3,最后一次出现的fields4,fields5的最后一个非空非null的有效值,fields6所有的非空
? ? ?* 非null的有效值使用分隔符连接起来的字符串”
? ? ?*/
? ? public static class GroupByUDAFEvaluator implements UDAFEvaluator{
? ? ? ? // 一个bean类记录字段和分隔符信息
? ? ? ? public static class PartialResult{
? ? ? ? ? ? String filed3;
? ? ? ? ? ? String filed4;
? ? ? ? ? ? String filed5;
? ? ? ? ? ? String filed6;
? ? ? ? ? ? String delimiter;
? ? ? ? }

? ? ? ? private PartialResult partial;

? ? ? ? public void init() {
? ? ? ? ? ? partial = null;
? ? ? ? }
? ? ? ? /*
? ? ? ? ?* 需要实现的第一个方法
? ? ? ? ?* 每个需要处理的处理都要经过的处理
? ? ? ? ?*/
? ? ? ? public boolean iterate(String filed3,String filed4,String filed5 ,String filed6){
? ? ? ? ? ? if(filed3 == null && filed4 == null && filed5 == null && filed6 == null){
? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? }

? ? ? ? ? ? if(partial == null ){
? ? ? ? ? ? ? ? partial = new PartialResult();
? ? ? ? ? ? ? ? partial.filed3 = "";
? ? ? ? ? ? ? ? partial.filed4 = "";
? ? ? ? ? ? ? ? partial.filed5 = "";
? ? ? ? ? ? ? ? partial.filed6 = "";
? ? ? ? ? ? ? ? partial.delimiter = "-";
? ? ? ? ? ? ? ? //filed3 logical
? ? ? ? ? ? ? ? partial.filed3 = filed3;
? ? ? ? ? ? }

? ? ? ? ? ? //filed4 logical
? ? ? ? ? ? partial.filed4 = filed4;
? ? ? ? ? ? //filed5 logical
? ? ? ? ? ? if(filed5 != null && !filed5.trim().equals("")) {
? ? ? ? ? ? ? ? partial.filed5 = filed5;
? ? ? ? ? ? }
? ? ? ? ? ? //filed6 logical
? ? ? ? ? ? if(filed6 != null && !filed6.trim().equals("")) {
? ? ? ? ? ? ? ? if(partial.filed6.length() > 0 ){
? ? ? ? ? ? ? ? ? ? partial.filed6 = partial.filed6.concat(partial.delimiter);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? partial.filed6 = partial.filed6.concat(filed6);
? ? ? ? ? ? }
? ? ? ? ? ? return true;
? ? ? ? }

? ? ? ? /*
? ? ? ? ?* 需要实现的第二个方法
? ? ? ? ?* 返回部分结果
? ? ? ? ?*/
? ? ? ? public PartialResult terminatePartial(){
? ? ? ? ? ? return partial;
? ? ? ? }

? ? ? ? /*
? ? ? ? ?* 需要实现的第三个方法
? ? ? ? ?* 将两个部分结果合并
? ? ? ? ?*/
? ? ? ? public boolean merge(PartialResult othe){
? ? ? ? ? ? if (othe == null){
? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? }

? ? ? ? ? ? if(partial == null ){
? ? ? ? ? ? ? ? partial = new PartialResult();

? ? ? ? ? ? ? ? partial.filed3 = othe.filed3;
? ? ? ? ? ? ? ? partial.filed4 = othe.filed4;
? ? ? ? ? ? ? ? partial.filed5 = othe.filed5;
? ? ? ? ? ? ? ? partial.filed6 = othe.filed6;
? ? ? ? ? ? ? ? partial.delimiter = othe.delimiter;
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? //filed4 logical
? ? ? ? ? ? ? ? partial.filed4 = othe.filed4;
? ? ? ? ? ? ? ? //filed5 logical
? ? ? ? ? ? ? ? if(othe.filed5 != null && !othe.filed5.trim().equals("")) {
? ? ? ? ? ? ? ? ? ? partial.filed5 = othe.filed5;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? //filed6 logical
? ? ? ? ? ? ? ? if(othe.filed6 != null && !othe.filed6.trim().equals("")) {
? ? ? ? ? ? ? ? ? ? if (partial.filed6.length() >0){
? ? ? ? ? ? ? ? ? ? ? ? partial.filed6 = partial.filed6.concat(othe.delimiter);
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? partial.filed6 = partial.filed6.concat(othe.filed6);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? return true;
? ? ? ? }

? ? ? ? /*
? ? ? ? ?* 需要实现的第四个方法
? ? ? ? ?* 构造返回值类型,返回结果
? ? ? ? ?*/
? ? ? ? public String terminate(){
? ? ? ? ? ? return "filed3:"+partial.filed3+" filed4:" +partial.filed4+" ?filed5 :"+partial.filed5+" filed6: "+partial.filed6;
? ? ? ? }
? ? }
}
?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-18 12:46:21  更:2021-08-18 12:47:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:12:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码