【面试题】海量数据处理相关题目
1. foreword 做腾讯TSA比赛时,遇到海量数据的问题,工作站54G内存,把原始数据读进去各种操作后生成特征,再训练导致崩掉。后来只能把特征做好后存成文件,需要用的时候再读进去,省去了生成的中间环节文件。为了确保内存受得住,把特征按照天来存,最终总算是可以顺利训练和预测了。 内存总是不够的。对于海量数据处理的策略无非是:分解,大化小。除此没啥好办法,除非加内存。但总归需要在软件上下功夫,资源总是有限的。避免浪费。 《九章算法》提供有数十道关于大数据的题目。特此记录。 2. 题目解析 (1)给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址?与上题条件相同,如何找到top K的IP?如何直接用Linux系统命令实现? 答:前两问其实是一问,top K 分别为1和k。该文件大小为100G,放入内存压力太大,分解为若干小文件,每个小文件则可以在内存中处理。这叫做 hash分桶法 。 将该文件按照 IP 的最后三位分为256个小文件。若均匀则每个小文件大小约为400M,可在内存中直接操作。用公式表述为:file_id = hash(ip) % 1000。 在每个小文件中统计各 IP 的出现次数。可以用IP为key,其出现次数为value统计。取出每个小文件中的top k 的记录。要求次数最多时k=1,前5则k=5。 合并这些小文件