zoukankan      html  css  js  c++  java
  • Hive 的 排序

    全排序:order by对全部所有的数据进行排序,在实现的时候是放到一个reduce中进行的,可以想象这样做效率是比较低的;

    局部排序:sort by对数据进行分组,然后在组内进行排序,每个reduce分别进行自己的排序;

    row_num()函数:row_num函数通常用over(partition by id),把后面相同id的划分为一组,对这一组内的数据来进行排列;

    distribute by:控制着在map端如何分区,按照什么字段进行分区,要注意均衡。在有些情况下,你需要控制某个特定行应该到哪个reducer,通常是为了进行后续的聚集操作。Hive的distribute by 子句可以做这件事。这里就是MR程序员经常做的,设置PARTITION类的过程,此处已经成为一种语法;
     
    sort by:每个reduce按照sort by 字段进行排序,reduce的数量按照默认的数量来进行,当然可以指定。最终可以进行归并排序得出结果。适用于数据量比较大的排序场景。在很多情况下,并不需要全局排序,此时可以换成Hive的非标准扩展sort by。Sort by为每个reducer产生一个排序文件;
     
    order by:reduce只有一个,在一个reduce中完成排序,使用于数据量小的场景。能够预期产生完全排序的结果,但是它是通过只用一个reduce来做到这点的。所以对于大规模的数据集它的效率非常低;
     
    partition by:partition by指定按照字段进行分组,能够和row_num一起使用
     

     例如

    1. // 根据年份和气温对气象数据进行排序,以确保所有具有相同年份的行最终都在一个reducer分区中  
    2.   
    3. From record2  
    4. select year, temperature  
    5. distribute by year  
    6. sort by year asc, temperature desc;  

    因此,distribute by 经常和 sort by 配合使用。
  • 相关阅读:
    java 读取ini文件
    JPA简单的分页条件查询
    工厂模式之简单工厂模式,head first设计模式
    mvnw 找不到或无法加载主类,找不到符号,类
    spring boot 通过feign调用api接口
    Ubuntu18.04 samba配置
    log4cplus例子
    ES->PES->PS打包程序
    RED5安装与配置
    Java 常用的日志工具——JDK自带的java.util.logging包、APACHE 的log4j 与 slf4j日志处理接口
  • 原文地址:https://www.cnblogs.com/laodageblog/p/4091964.html
Copyright © 2011-2022 走看看