您当前的位置: 首页 >  大数据

Bulut0907

暂无认证

  • 4浏览

    0关注

    346博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

Bulut0907 发布时间:2022-04-24 09:23:13 ,浏览量:4

目录
  • 1. 查找大文件相同两行
  • 2. 大文件全排序

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
关注
打赏
1664501120
查看更多评论
立即登录/注册

微信扫码登录

0.0398s