大数据Spark “蘑菇云”行动第93课:Hive中的内置函数、UDF、UDAF实战

大数据Spark “蘑菇云”行动第93课:Hive中的内置函数、UDF、UDAF实战



 大数据Spark “蘑菇云”行动第93课:Hive中的内置函数、UDF、UDAF实战


select sum_all(age) from ...


hive> use default;
show tables;
select * from employeeforhaving;




一:udf 编码
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;


public final class LowerCase extends UDF {
  public Text evaluate(final Text s) {
    if (s == null) { return null; }
    return new Text(s.toString().toLowerCase());
  }
}




二:导出jar包  hadoopapps.jar


三,加载jar包
hive> add jar /root/..../hadoopapps.jar


四,hive> CREATE TEMPORARY FUNCTION tolower AS com.dt.spark.hive.HIVEUDF


五,使用


hive> SELECT tolower(name) from employeeforhaving;




一:UDAF 聚合 编码


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


public class concat extends UDAF {
 public static class ConcatUDAFEvaluator implements UDAFEvaluator{
  public static class PartialResult{
   String result;
   String delimiter;
  }


  private PartialResult partial;
 
  public void init() {
   partial = null;
  }
 
  public boolean iterate(String value,String deli){
   
   if (value == null){
    return true;
   }
   if (partial == null){
    partial = new PartialResult();
    partial.result = new String("");
    if(  deli == null || deli.equals("") )
    {
     partial.delimiter = new String(",");
    }
    else
    {
     partial.delimiter = new String(deli);
    }
       
   }
   if ( partial.result.length() > 0 )
   {
    partial.result = partial.result.concat(partial.delimiter);
   }
   
   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 == 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);
  }
 }
}


二:




www.zeeklog.com  - 大数据Spark “蘑菇云”行动第93课:Hive中的内置函数、UDF、UDAF实战
www.zeeklog.com  - 大数据Spark “蘑菇云”行动第93课:Hive中的内置函数、UDF、UDAF实战
www.zeeklog.com  - 大数据Spark “蘑菇云”行动第93课:Hive中的内置函数、UDF、UDAF实战



www.zeeklog.com  - 大数据Spark “蘑菇云”行动第93课:Hive中的内置函数、UDF、UDAF实战
www.zeeklog.com  - 大数据Spark “蘑菇云”行动第93课:Hive中的内置函数、UDF、UDAF实战
www.zeeklog.com  - 大数据Spark “蘑菇云”行动第93课:Hive中的内置函数、UDF、UDAF实战
www.zeeklog.com  - 大数据Spark “蘑菇云”行动第93课:Hive中的内置函数、UDF、UDAF实战




www.zeeklog.com  - 大数据Spark “蘑菇云”行动第93课:Hive中的内置函数、UDF、UDAF实战


www.zeeklog.com  - 大数据Spark “蘑菇云”行动第93课:Hive中的内置函数、UDF、UDAF实战






 UDAF 聚合

www.zeeklog.com  - 大数据Spark “蘑菇云”行动第93课:Hive中的内置函数、UDF、UDAF实战
www.zeeklog.com  - 大数据Spark “蘑菇云”行动第93课:Hive中的内置函数、UDF、UDAF实战
www.zeeklog.com  - 大数据Spark “蘑菇云”行动第93课:Hive中的内置函数、UDF、UDAF实战




www.zeeklog.com  - 大数据Spark “蘑菇云”行动第93课:Hive中的内置函数、UDF、UDAF实战



www.zeeklog.com  - 大数据Spark “蘑菇云”行动第93课:Hive中的内置函数、UDF、UDAF实战
www.zeeklog.com  - 大数据Spark “蘑菇云”行动第93课:Hive中的内置函数、UDF、UDAF实战
www.zeeklog.com  - 大数据Spark “蘑菇云”行动第93课:Hive中的内置函数、UDF、UDAF实战
www.zeeklog.com  - 大数据Spark “蘑菇云”行动第93课:Hive中的内置函数、UDF、UDAF实战




Read more

用asp.net core结合fastdfs打造分布式文件存储系统

用asp.net core结合fastdfs打造分布式文件存储系统

最近被安排开发文件存储微服务,要求是能够通过配置来无缝切换我们公司内部研发的文件存储系统,FastDFS,MongDb GridFS,阿里云OSS,腾讯云OSS等。根据任务紧急度暂时先完成了通过配置来无缝切换内部文件系统以及FastDFS。至于MongDb GridFS,阿里云OSS,腾讯云OSS等则后期需要的话再开发对应的提供者程序集合。 作者:依乐祝 首发公众号:DotNetCore实战 原文链接: 今天主要是对开发过程,以及对FastDFS这个通用的分布式文件存储服务的单机及集群安装部署过程做个总结。希望对想要自建分布式文件系统的朋友有所帮助。 什么是FastDFS 这里先简单介绍下分布式文件存储系统。 FastDFS 是一个开源的高性能分布式文件系统(DFS)。 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。 FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)

By Ne0inhk
从零搭建分布式文件系统MinIO比FastDFS要更合适

从零搭建分布式文件系统MinIO比FastDFS要更合适

前两天跟大家分享了一篇关于如何利用FastDFS组件来自建分布式文件系统的文章,有兴趣的朋友可以阅读下《》。通过留言发现大家虽然感兴趣,但是都觉得部署比较麻烦。的确,fastdfs的部署很繁琐,而且也没有官方提供的针对.net core的sdk。而今天带来的MinIO则是一个比fastdfs更好的选择,可以让你足够简单的来部署使用,官方也提供了足够详细的api文档。下面就让我们开始今天的正文吧。 这里说明下为什么今天才进行分享,因为就在几个小时前官方才发布了最新的3.1.12版本的nuget包,解决了BucketExistsAsync的一个bug,不然你还得引用源码才能正常运行。 作者:依乐祝 原文地址: MinIO是什么? 官方对MinIO的介绍是:高性能,Kubernetes原生支持的对象存储系统。MinIO的高性能软件定义对象存储套件可以使用户能够为机器学习、分析和应用程序数据工作负载构建云原生支持的数据基础设施。下面是几个常用的网址 * 官网: * 开源地址: * 中文文档: * .NET 客户端api地址: * 下载地址: * minio-dotnet

By Ne0inhk
【半译】扩展shutdown超时设置以保证IHostedService正常关闭

【半译】扩展shutdown超时设置以保证IHostedService正常关闭

我最近发现一个问题,当应用程序关闭时,我们的应用程序没有正确执行在IHostedService中的StopAsync方法。经过反复验证发现,这是由于某些服务对关闭信号做出响应所需的时间太长导致的。在这篇文章中,我将展示出现这个问题的一个示例,并且会讨论它为什么会发生以及如何避免这种情况出现。 作者:依乐祝 首发地址: 英文地址: 使用IHostedService运行后台服务 ASP.NET Core 2.0引入。该: public interface IHostedService { Task StartAsync(CancellationToken cancellationToken); Task StopAsync(CancellationToken cancellationToken); } StartAsync在应用程序启动时被调用。在ASP.NET核心2.X发生这种情况在应用程序启动处理请求,而在ASP.NET核心3.x中托管服务开始在应用程序启动处理请求。 StopAsync当应用程序收到shutdown(SIGTERM)信号时(例如,您

By Ne0inhk
重学ASP.NET Core 中的标记帮助程序

重学ASP.NET Core 中的标记帮助程序

标记帮助程序是什么 标记帮助程序使服务器端代码可以在 Razor 文件中参与创建和呈现 HTML 元素。 例如,内置的 ImageTagHelper 可以将版本号追加到图片名称。  每当图片发生变化时,服务器都会为图像生成一个新的唯一版本号,因此客户端总能获得当前图像(而不是过时的缓存图像)。 作者:依乐祝 原文链接: 标记帮助程序的作用域是如何控制的 标记帮助程序作用域由 @addTagHelper、@removeTagHelper 和“!”选择退出字符等联合控制。下面就一一的进行相关的介绍吧。 使用 @addTagHelper 添加标记帮助程序 @addTagHelper 指令让视图可以使用标记帮助程序。 在这种情况下,视图文件是_pages/ViewImports,默认情况下,它由_pages_文件夹和子文件夹中的所有文件继承,这使得标记帮助程序可用。 这里公开标记帮助程序有两种方式,如下所示: 第一种:使用通配符语法(" * ")指定指定程序集(AspNetCore)中的所有标记帮助程序都可用于_Views_目录及其子目录中的每个视图文件。 @addTagHelp

By Ne0inhk