一、问题描述
- 现在有10个文件,每个文件1GB,每个文件的每一行都存放的是用户的query查询信息,并且每个文件的query都可能是重复的
- **现问:**如何将这些文件中所有的query按照出现的频度进行排序?
二、解决方案
- **第一步:**先读取每个文件,对每条query做哈希,哈希函数为f(query)=query%10,根据哈希的结果,将每个文件写入到对应的文件中。这样处理之后任意一个query就只会出现在同一个文件中了
- **第二步:**对第一步得到的10个文件,每个文件都做下面的操作
- 每个文件构建一个hash_map数据结构,query作为key(是唯一的),value是每条query出现的次数
- 根据hash_map的value进行堆排序
- 将排序好的结果保存到文件中
- 这样我们就得到了10个文件,每个文件中query的频度都是从多到少排序好的
- 第三步:对第二步得到的10个文件进行归并排序,将排序的结果保存到一个文件中