hive排序

准备阶段

  • 准备一个保存员工信息的文件 包含每个员工的姓名 部门和成绩
jack 测试 60
tom 开发 88
shy 销售 56
duke 开发 95
zoom 销售 26
penut 销售 63
leyan 销售 77
jkl 开发 54
ning 测试 12
faker 销售 99
wwk 销售 68
baolan 测试 55
uzi 测试 66
letme 开发 78
  • 然后创建一个myuser表
create external table myuser
(
   name string,
   type string,
   score int
) row format delimited fields terminated by ' ';
  • 加载数据
load data local inpath '/root/user.txt' into table myuser;

全局排序

  • Order By:全局排序,只有一个reduce
  • 按照员工成绩对所有员工降序排序 select * from myuser order by score desc;
faker   销售    99
duke    开发    95
tom     开发    88
letme   开发    78
leyan   销售    77
wwk     销售    68
uzi     测试    66
penut   销售    63
jack    测试    60
shy     销售    56
baolan  测试    55
jkl     开发    54
zoom    销售    26
ning    测试    12

局部排序(Sort By)

  • Sort By:每个MapReduce内部进行排序,对全局结果集来说不是完全有序。

  • 设置reduce个数为3
    set mapreduce.job.reduces=3;

  • 然后使用sort by对进行局部排序,select * from myuser sort by score;

  • 可以发现每个reduce内部是有序的

baolan  测试    55
shy     销售    56
wwk     销售    68
letme   开发    78
tom     开发    88
duke    开发    95
ning    测试    12
zoom    销售    26
jkl     开发    54
penut   销售    63
leyan   销售    77
faker   销售    99
jack    测试    60
uzi     测试    66

分区排序(DISTRIBUTE BY)

  • Distribute By:其实就是先根据字段a对数据进行分区 ,再根据字段b对每个分区内部进行排序。
  • 因为有三个部门这里设置reduce个数为3
set mapreduce.job.reduces=3;
  • 先根据部门进行分区,再对每个分区内部员工按照成绩进行排序
select * from score distribute by s_id sort by s_score;

CLUSTER BY

  • 当distribute by和sort by字段相同时,可以使用cluster by方式。 cluster by除了具有distribute by的功能外还兼具sort by的功能。
  • 结果根据name分区,每个分区内部根据name排序
//以下两种写法等价
select * from myuser cluster by name; 
select * from myuser distribute by name sort by name;
  • 两种写法排序结果均如下
baolan  测试    55
jack    测试    60
letme   开发    78
penut   销售    63
shy     销售    56
jkl     开发    54
leyan   销售    77
tom     开发    88
wwk     销售    68
zoom    销售    26
duke    开发    95
faker   销售    99
ning    测试    12
uzi     测试    66
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值