大数据分治思想:查找大文件相同两行、大文件全排序

1. 查找大文件相同两行

题目:有一个2T的文本文件,只存在2行相同的数据,请用一台256M内存的单机服务器,找出这相同的2行数据

解决步骤:

  1. 读取一条数据A,求A的hashcode,然后取模,即X = a.hashcode % 10000,X的范围为0 ~ 9999,将数据A保存到fileX文件中
  2. 按步骤1进行文件的遍历,处理剩余的每条数据。这样2T的文件被分割成10000个小文件,但相同的2行数据肯定在同一个小文件中
  3. 依次处理每个小文件,找出在一个小文件中是否存在相同的两行

2. 大文件全排序

题目:在一个2T的文本文件,每一行都是一个数字,且都不相同,请用一台256M内存的单机服务器对这个乱序的文本文件,进行全排序

方法1:

  1. 读取一条数据A,如果A的值在[0, 1000000)之间,则将A保存到file0文件中;如果A的值在[1000000, 2000000)之间,则将A保存到file1文件中。根据A的取值范围不同,被划分到不同的文件中,合计10000个小文件
  2. 按步骤1进行文件的遍历,处理剩余的每条数据。这样2T的文件被分割成10000个小文件,各个小文件之间的数据是外部有序的,每个小文件内部是乱序的
  3. 依次处理每个小文件,对每个小文件内部的数据进行排序

方法2:

  1. 一次读取128M数据,进行排序,保存到file0文件中
  2. 第二次读取128M数据,进行排序,保存到file1文件中
  3. 依次类推,数据被保存到10000个小文件中。在每个小文件内部数据是有序的,各个小文件之间的数据是无序的
  4. 采用归并排序,对各个文件之间的数据进行排序

归并排序

  1. 将file0文件的第一个数取出来,赋值给变量X0,file1文件的第一个数取出来,赋值给变量X2,依次类推,将file9999文件的第一个数取出来,赋值给变量X9999
  2. 求出X0 ~ X9999之间的最小值,将其保存到文件file_v_0中
  3. 再从fileN中取出值赋给XN, 重复步骤2
  4. 重复步骤3,如果file_v_0小文件的大小,超过128M,则将数据保存到file_v_1小文件中,依次类推。最后保存的小文件为file_v_9999
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值