大数据数据结构和算法_排序_归并排序(外部排序)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如:/home/haoran/largeFiles_i/bigdata.sorted
排序
方案1(Line -> Line -> Line): 将大文件分为一行一行的有序小文件(字符文件),多路合并为 一行一行的大文件(字符文件). 1.按行读取大文件,搜集到一定行数后,内存排序,然后将排序 结果按行写入小文件.
排序
外部排序合并策略 维护n个小文件的输入input[n]. 维护1个内存中的小对象或者小数组mem_array[n],用于排序. 1.每次从小对象mem_array中取最小least的元素,写入最终文件, 一次写入一个数据. 2.若选取的最小元素属于第 i 个小文件,那么从input[i]读取下一 个数据放入mem_array[i]中,进行排序. 3.重复1、2步,直到所有的input[n]中数据都已处理完毕.

smallFile,小文件 (内部有序)
多路归并排序
… largeFile 最终有序的大文件
排序
文件类型约定: 1.字符型文件,每行一个整数,称line型 2.二进制文件,每4字节表示一个整数,称binary(bin)型
注:line和bin文件本质都是二进制
文件类型转换:
@b2l src dst

最终结果, 大文件(有序)
排序
2
6
1
3
7
5
4
7
13
5
8
14
6
20
15
文件1 文件2 文件3
3个小文件,每个文件内的数 据都有序
6 6 13
将最小值写入
6
6 13
将最小值写入
6
7 13
将最小值写入
7
7 13
将最小值写入
7
8 13
将最小值写入
8
13 20
将最小值写入
13
14 20
将最小值写入
14
15 20
如:/home/haoran/largeFiles_i/bigdata.001.part.unsorted
4. 有序的小文件名:bigdata.$partNum.part.sorted
如:/home/haoran/largeFiles_i/bigdata.001.part.sorted
5. 已排序的大文件名:bigdata.sorted
排序
文件命名约定: 1.所有结果放入文件夹${HOME}/largeFiles_i
如:/home/haoran/largeFiles_i
2.待排序的大文件名:bigdata
如:/home/haoran/largeFiles_i/bigdata
3.无序的小文件名:bigdata.$partNum.part.unsorted
重复上述过程,直到大文件处理完毕,这样我们就得到了很多有序的小文件.
2.利用多路归并排序对这些小文件排序,按行写入最终的有序大 文件.
排序
将大文件分割,每个小部分装入内存排序
排序 后写入 小文件 清空mem

largeFile,大文件 一次性装不进内存进行排

mem,内存缓冲区 在此进行排序
大文件分割为 很多有序的小
文件

smallFile,小文件 每个小文件内的数据都有

排序
一个n个元素的有序小集合: s {x | xi x j , i, j [0, n)} 现在我们有m个小集合:s1, s2 ,..., sm 那么当前所有小集合中的最小值: min min(min(s1), min(s2 ),..., min(sm ))
将最小值写入
15
wenku.baidu.com
20
将最小值写入
20
最终结果, 大文件(有序)
排序
2
6
1
3
7
5
4
7
13
5
8
14
6
20
15
文件1 文件2 文件3
3个小文件,每个文件内的数 据都有序
1
6
2
6
3
7
4
7
5
8
5
13
14 最终结果, 大文件(有序)
15
20
排序
largeFile,大文件 一次性装不进内存进行排

单线程方案
… 单线程排序 按行读取大文件进内存, 搜集一定数量后进行排 序,写入小文件. 直到大文件处理完毕.
数据结构和算法
第17课 排序-归并排序(外部排序)
排序
本课时目标: ✓基础环节**:了解外部排序 ✓基础环节***:了解多路归并排序的思想 ✓实操环节****:实现多路归并排序
排序
外部排序 当待排序的数据量巨大,无法一次性放入内存中,可以选择的一 种方式就是进行外排序. 分:将磁盘上的数据文件(large file)划分成一个一个小文件 (part),每个小文件可以被放入内存进行排序,这样可以得到一 个一个有序的小文件. 合:选取一种合并策略,将许多有序的小文件合并成一个有序的 大文件. 不能这么合:在内存中新大开数组或者大对象,将小文件依次读 入再排序,将这个大数据或者大对象持久化到磁盘. 为什么?
排序
最小值属于哪个文件,就从哪个文件取下一个值 并加入mem进行排序
2
6
1
1
2
6
将最小值写入
1
3
7
5
4
7
13
5
8
14
6
20
15
文件1 文件2 文件3
2
5
6
将最小值写入
2
3
5
6
将最小值写入
3
4
5
6
将最小值写入
4
5
5
6
将最小值写入
5
5
6
6
将最小值写入
5
3个小文件,每个文件内的数 据都有序
mem 内存缓冲区,大小和小文 件个数(划分的个数)相
相关文档
最新文档