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

目录

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
    原文作者:Bulut0907
    原文地址: https://blog.csdn.net/yy8623977/article/details/123964465
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞