大数据排序
大数据开发工程师的一道经典面试题
首先区分内部排序和外部排序
内部排序:内部排序是指待排序序列可以全部装入内存的排序过程,适用于规模较小的元素序列。
外部排序:外部排序是指大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,才能达到排序整个文件的目的。
其次要注意待排序数据的特点
如果待排序数据具有某些特点,往往能够有更加有效的方法解决。
同时,这种思想也更加贴近大数据应用的思维方式。
总体思想:分而治之
对于大数据问题,分而治之的思想十分普遍。同时分布式计算、并行计算等也都类似。
包括Hadoop采用的map-reduce模型,分而治之的思想都贯穿其中。
1. 如果是以时间为基准排序的话
以时间为基准排序,那么可以把一天的数据存成一个文件,或者把固定天数的数据存成一个文件,这样各个文件之间就是有序的了。
首先,根据数据的时间跨度和数据量大小,选择合适的天数为一个区间,为每个区间新建一个文件。
将全部数据遍历一遍,按时间将其存入对应的文件中。
对每个文件中的数据分别进行排序。
将全部文件按顺序合并到一起,即是排序好的数据序列了。
2. 如果是byte型,或者是其它取值有限且较少的数据
对于这种byte型,或者是其它取值有限且较少的数据,更专业更具体地说,应该是输入的线性表的元素属于有限偏序集则可采用计数排序的方法,不过这种方法要求过于苛刻,适用情况少。
一个典型例子就是成绩的统计,特别是那种全是整数的情况。
假设数据共有n种取值:
首先新建一个长度为n的数组。
扫描全部n种取值,对于每种取值,找到集合中等于该值的元素的个数,存入数组。
再扫描整个输入的线性表,对于每个元素,都可以得到他在最终输出的线性表中的位置。