我想写一个map reduce来比较hdfs中的两个大文件。任何想法如何实现这一点。或者,如果还有其他方法可以进行比较,因为文件大小非常大,所以认为map-reduce会是一个理想的方法。 感谢您的帮助。hdfs中的两个文件比较
回答
您可以通过2个步骤完成此操作。
- 首先使线数为文本文件的部分:
说最初的文件看起来像:
I am awesome
He is my best friend
现在,将它转换为是这样的:
1,I am awesome
2,He is my best friend
这很可能是由MapReduce作业本身或其他工具完成的。
2.现在编写MapReduce步骤,其中映射器将行号作为键和实际句子的其余部分作为值发出。然后在减速器中比较这些值。当它不匹配时发出行号(密钥)和有效载荷,无论你在这里想要什么。另外,如果values
的计数仅为1,那么它也是不匹配的。
编辑:更好的方法
更妙的是你可以做的是,刚刚发出的映射为重点,一次读取的完整产品线,使值的号码的,说1。所以把我的例如上述的映射器输出将如下所示:
< I am awesome,1 >
< He is my best friend,1 >
而在减速只是检查计数的values
,如果不是2,你有一个不匹配。
但是这种方法有一个问题,如果在两个不同的地方有可能发生完全相同的行,那么不应该检查reducer中给定键的values
的长度,而应该检查它是2的倍数。
一种可能的解决方案可能是将行号作为计数放在地图作业中。 有像下面两个文件:
文件1: 我在这里--line 1 我真棒 - 2号线 你是我最好的朋友 - 3号线
文件2也类似种类
现在,您的地图作业输出应该是这样的,<我真棒,2> ...
一旦你与这两个文件的地图完成任务,你有两个记录(键,值)具有相同的其价值减少。
在缩小时,您可以比较计数器或生成输出,等等。如果该线路在不同位置存在,则可能是表示该线路不匹配。
我有一个比较文件与键的解决方案。在你的情况下,如果你知道你的ID是唯一的,你可以在地图上发出ID作为键,整个记录作为值。让我们说你的文件有ID,Line1然后作为key和mapper的值发出。
在洗牌和排序阶段,该ID的将被排序,你会得到来自这两个文件的数据的迭代器。即,来自两个具有相同ID的文件的记录将以相同的迭代器结束。
然后在减速,从迭代器比较这两个值,如果他们匹配下一条记录继续前进。否则,如果它们不匹配,则将它们写入输出。
我已经做到了这一点,它的工作就像一个魅力。
场景 - 没有匹配的密钥 如果两个文件之间没有匹配的ID,它们将只有一个迭代器值。
方案2 - 重复键 如果文件有重复键,迭代器都将有2倍以上的值。
注意:只有当迭代器只有2个值时,才应该比较这些值。 **提示:**迭代器不会始终有值。 file1的 线路1;为了识别从特定文件中的值,在映射器在像线路1行的末尾添加一个小的指示器file2的 然后在减速器你将能够识别哪个值属于哪个映射器。
- 1. HDFS文件比较
- 2. 2 Hdfs文件比较
- 3. 比较Unix中两个文本文件的比较函数
- 4. Excel - 比较两个文件?
- 5. 比较两个文件
- 6. 比较两个文件
- 7. 比较两个文件
- 8. AWK比较两个文件
- 9. 比较两个excel文件
- 10. 两个文件比较
- 11. 比较两个文件
- 12. 比较两个文件
- 13. 比较两个文件
- 14. 比较两个CSV文件,
- 15. 比较两个文件
- 16. 比较两个大文件
- 17. 两个文件夹的文件比较
- 18. 比较两个csv文件中的列
- 19. 比较Hadoop MapReduce中的两个文件
- 20. 比较c中的两个文件
- 21. 比较java中的两个文件
- 22. 比较Erlang中的两个文件
- 23. 比较两个文件中的行
- 24. 两个文件中的数据比较
- 25. 比较两个文件中的值
- 26. 比较python中的两个文件?
- 27. 比较python中的两个xml文件
- 28. 比较Unix中的两个文件
- 29. Linux的比较两个文本文件
- 30. 在C中比较两个csv文件#
嗨阿马尔,感谢您的回应。但我的文件具有出现在两个文件中的项目ID。我需要比较两个id是否相同以及它们的相应值。 – NewJavaBee 2013-02-20 18:50:36
文件中有什么并不重要,对吧?通过比较你的意思是二进制比较,对吗?在你的文件中,你可能有一个ID,比如'1234456565',而不是'我很棒'。 – Amar 2013-02-20 18:53:29
我的意思是说,假设我有这两个文件。文件1包含 ID:1 ... .. ID:2 ...。 ID:3 ...。 文件2 ID:5 ... .. ID:3 ...。 ID:6 ...。 现在进行此比较。我需要首先匹配两个文件中的ID,而不是比较。并没有哼哼。 – NewJavaBee 2013-02-20 18:54:29