今天不学习,明天不学习,后天就习惯不学习了
小谈:
上次讲了sort by和order by的区别,order by 进行全局排序,此时的reduce只有1个。
sort by分情况。
情况一:一个reduce。相当于order by 会进行全局排序,因为全局就只有那一个reduce
情况二:多个reduce。sort by 会在多个reduce里面。对每一个reduce进行内部的排序。就是每个reduce里面是排序的,但是不保证全局有序。
正菜:
含有SORT BY的Distribute By
正常情况下,sort by经常和distribute by配合。
默认情况下,mapreduce计算框架会依据map输入的键计算相应的哈希值,然后按照哈希值将键值均匀的分发到各个reduce中。这也就意味着不同的reduce输出会有一定的重复值。
下面为了避免会有重复值,我们通过distribute by配合sort by进行搭配。
select s.ymd,s.symbol,s.price
from stocks s
distribute by s.symbol
sort by s.symbol ,s.ymd
可以看到,第二列 就是我们上面的 s.symbol这个字段的值都是一样的,
对s.symbol这个字段进行哈希操作,将哈希值相同的返回到同一个reduce里面,返回到同一个reduce里面后,在reduce里面进行排序。
总结:
在我们平常学习中,在Hive里面经常用到的就是group by + sort by 和 distribute by + order by 。
现在group by + order by 和distribute by + sort by 都已经讲了。
所以现在就请大家开始新一轮的学习吧。
从明天起,早上不再卧床,会更加用心的更新博文了。