前天接到电话面试,有一个url 去除重复的问题,场景大概是:
公司获取了大量url,肯定是超过内存了,按行存放,现在目的想剔除重复的数据
比如:一个5G 的txt 文件,url 一行一行的存放,而我们的内存只限制1G
我当时首先考虑分拆文件,然后hash,然后想排序比较,当时没想到好的办法,这里先说第一种:
方案一:
1.拆分文件,A B C D E,
条件:
1.保证每个文件读取小于内存限制1G,这样会分成5个文件
2.拆分的时候,按行读取,可以用TreeSet 集合去除重复,并且并且排序,然后在接近内存容量的时候输出到文件
结果:分割成5个左右的1G,并且排好序,且单个文件url不重复
2 . 这时候获得的文件,我们可以假设内容为,数字代替url
A B C D E
2 4 2 6 17
4 6 3 16 27
6 8 4 26 37
7 17 5 36 47
9 24 6 46 57
11 34 9 56 67
12 44 11 66 77
22 54 12 76 87
42 64 22 86 97
。。。。。。。。。。。。。。。。。略
这时候就行合并、排序,。因为都是都大到小,或者相反的顺序,因此可以从头开始读取,假设我们1G内存,只能装10W行 url.那么合并读取
执行:
分别从读取A,B,C,D,E 第一行开始2,4,2,6,17,那么读取第一行之后,去重复,排序之后是:
A1:2,4,6,17
这里的操作方式应该比较多,我选择的的是最小数优先的原则,第一次取值A1,已经选择,发现 2,是最小的,并且是从A,C 文件中诞生的,那么第二次选择 我会从A,C的第二行开始选择,分别是4,3.这里4会被踢出,3,保留,这是A1:2,3,4,6,17
因为3是从C提取的,然后从C的第三行开始,获得4,重复,然后继续获得5,然后放入
A1:2,3,4,5,6,16
这时候发现从C中获得的5 大于从A的第二行的4,以及B中获得的4.(这里要跟新每个文件最后一次读取过的值,方便比较),然后继续读取A,B下一行:6和6 ,踢出,继续下一行7,8。然后加入
A1:2,3,4,5,6,7,8,17
然后现在的7 大于 D中的6,就从D的下一行开始,获得16,然后同样的方式,重复的踢出,然后找到最小的值,从该值的下一行读取,知道A1文件 有1G,开始第二个文件
思路:以文件行为单位,以最小的值,为方向,不断向下查找,重复就继续,否则添加,最后以相同的方式多个文件合并,最后就会形成不重复的,排序好的url 文件集合。当然这里可以像我一样选择多个文件同时进行,也可以选择 两个进行。
如果有N个内存或者服务器,那么可以分配进行,也就是说像管理员找书那样,将书分成很多部分,然后每一部分都由一个人负责查找,然后将结果送到中间的一个人进行处理,这样效率肯定是比较高的,这样的方式无论是查找,去重 都很 好,应该是分布式的应用,多个服务器运作,中间件通知反馈消息。
小结:
1.整个思路可能没有动态的图,还有的模糊,有什么不好的地方,请大家指点,有更好的方法,欢迎大家推荐。
2.这里用的Set的不存重复元素的特性,也是hash的比较,还有自带排序的功能,当然排序方式可以自己写,快排的效率很高,但是注意深度问题,无规则的数据很好。
3.关于大数据的利用,目前没怎么接触,就自己鼓捣一些方法,也不知道效率如何,相信以后会加强这方面的学习的。
相关推荐
爬虫通过网页中的超链接信息遍历整个网络,其工作流程包括:选择种子URL,放入待抓取队列,依次下载网页,解析链接获取新URL,重复此过程,直至遍历完所有目标网页或达到预设条件。一般采用广度优先搜索算法,以避免...
3. **数据清洗**:数据清洗是将原始抓取的数据转换为适合分析的形式的过程,包括去除重复项、填充缺失值、格式转换等。在实际应用中,可能还需要用正则表达式(如Python的re模块)进行文本处理,以提取出有用信息。 ...
首先,将两个文件的内容合并为一个DataFrame或RDD,然后通过`reduceByKey(_ + _)`对键值对进行合并,最后用`distinct()`去除重复项。 2. 求平均值:这个任务需要计算多个文件中所有学生的平均成绩。首先,将所有...
1. URL管理器的实现:在Python中,URL管理器可以通过内存中的set数据结构实现,这样可以自动去除重复的URL;也可以将URL存储在关系数据库中,比如MySQL,使用特定的表来管理待爬取和已爬取的URL;或者使用缓存数据库...
14. **网络数据处理模块**:分词(内容解析)、排重(去除重复信息)、整合(格式统一)和数据存储(Spider Data和Dp Data)。 15. **大数据建模**:建模是为了理解和抽象事物,涉及定义问题、理解数据、准备数据、...
- 无重复总条数:去除重复记录后的数量。 - 独立UID总数:不重复的用户ID数量。 - 查询频度排名:按查询词出现频率排序,获取前50高频词汇。 - 查询次数大于2次的用户总数:统计查询次数超过2次的用户数。 - ...
- **无重复总条数**: 使用`GROUP BY`和`HAVING COUNT(*)=1`去除重复记录。 - **独立UID总数**: 计算唯一用户ID(uuid)的数量。 - **查询频度排名**: 通过对查询词分组并计算频度,然后按降序排列,获取前50个...
5. **数据清洗与分析**:对爬取的数据进行清洗,去除无效或重复信息,为后续分析做好准备。 #### 结论 通过基于Python的网络爬虫技术,可以高效地从互联网上抓取大量水产品价格信息,为后续的大数据分析预测系统...
3. 数据清洗与预处理:使用Pandas等工具去除重复、缺失数据,转换数据格式,为后续分析做准备。 4. 数据可视化:Matplotlib、Seaborn、Plotly等库可用于数据可视化,帮助理解数据特征和趋势。 五、爬虫的法律与...
### Java大数据内容_5Mapreduce、数据挖掘 #### 1. MapReduce应用案例开发 MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算,它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序...
压缩包中的“大数据去除重复工具.exe”很可能是一个专门设计用于处理大数据去重的程序,它可能采用了上述的一种或多种算法,并进行了优化以提高处理速度。这种工具可能利用了分布式计算框架,如Hadoop或Spark,将...
- **去重机制**:确保不重复抓取同一网页。 #### 二、Python爬虫实现 - **常用库**: - **Requests**:用于发送HTTP请求。 - **BeautifulSoup**:用于解析HTML文档。 - **Scrapy**:一个快速高效的爬虫框架。 ...
数据清洗是数据分析过程中的关键步骤,它涉及到去除重复、错误、不完整或不一致的数据,以确保后续分析的有效性和准确性。在大数据背景下,Web数据因其丰富性和实时性,成为了研究和商业智能的重要来源。 **第7章:...
这些网页通常含有大部分相同或高度相似的内容,但可能由于URL、排版、元信息等因素存在微小差异。它们可能是网站的不同版本、镜像站点或者是抄袭或转载的内容。近似重复网页的存在对于搜索引擎优化(SEO)和信息检索...
- **数据去重**:Web数据往往存在大量重复,需要去除冗余信息。 - **结构化处理**:将非结构化的HTML数据转换为结构化数据,如JSON、CSV格式。 - **数据验证**:确保数据的有效性,例如检查URL是否有效,日期格式...
5. **数据清洗与预处理**:数据众包得到的数据往往不完整、不准确或存在噪声,需要进行清洗和预处理,包括去除重复项、填充缺失值、纠正错误和转换格式等。这一阶段可能涉及到Python的Pandas库或SQL查询。 6. **...
- OptimizerDriver 将解析的url与已经抓取的url做对比,去掉重复的url并加入,等待下次抓取 -------- 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传...
- **重复检测**:通过比较新抓取的 URL 与已存在的 URL,防止重复抓取。 8. **搜索功能**: Nutch 不仅可以抓取网页,还可以通过 Solr 或 Elasticsearch 等搜索服务器提供搜索服务,让用户能够基于抓取的数据进行...
Reduce阶段则负责收集Map阶段产生的中间结果,去除重复的URL,确保每个URL只被爬取一次,同时可能还会进行一些数据聚合操作,如统计网页的关键词分布等。 Java作为实现语言,是因为它具有跨平台性、丰富的库支持...