hive中的几种排序方式详解(附带具体数据)

数据:
在这里插入图片描述

1、order by 会对输入做全局排序,因此只有一个 reducer,会导致当输入规模较大时,需要较长的计算时间。
演示:

select
id,
score,
subject
from score1 order by score;

结果图:
在这里插入图片描述

2、sort by 不是全局排序,其在数据进入 reducer 前完成排序。因此,如果用 sort by 进行排序,并且设置 mapred.reduce.tasks>1,则 sort by 只保证每个 reducer 的输出有序,不保证全局有序。

--开启reduce的个数
set mapred.reduce.tasks = 3;
--指定开启分桶
set hive.enforce.bucketing = true;
set mapreduce.job.reduces=5; //经过测试至少要开启5个才能保证得到正确结果,可能不同的数据不同的个数吧,反正我的数据这样测试是准确的

select 
id,
score,
subject 
from score1 
distribute by subject  //使相同的key到同一个reduce中去
sort by score; //对同一个reduce的结果进行排序

在这里插入图片描述

3、distribute by(字段)根据指定字段将数据分到不同的 reducer,分发算法是 hash 散列。

--开启粪桶
set hive.enforce.bucketing = true;
set mapreduce.job.reduces=3;
select
id,
score,
subject
from score1 distribute by id;

在这里插入图片描述

4、Cluster by(字段) 除了具有 Distribute by 的功能外,还会对该字段进行排序。

select
id,
score,
subject
from score1 cluster by id;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值