【问题标题】:SimHash deduplication output in MapReduceMapReduce 中的 SimHash 重复数据删除输出
【发布时间】:2015-09-04 12:36:32
【问题描述】:

我正在实施 SimHash 算法 [1] 以使用 MapReduce 对数据集进行重复数据删除。

例如,如果我有 3 个文档 Doc1、Doc2、Doc3、Doc4。假设 Doc1 与 Doc3 相似,汉明距离小于 3。那么在进行重复数据删除之后,输出的“唯一”数据集应该是 Doc1、Doc2 和 Doc4。

我的实现涉及将每个文档哈希转换为 64 位字符串,然后将该位字符串划分为带以进行进一步匹配。 为简单起见,让我们这样说:

Doc1 = band0+{101},band1+{110}
Doc2 = band0+{100},band1+{110}
Doc3 = band0+{101},band1+{110}
Doc4 = band0+{100},band1+{101}

如果我按照相似的波段对文档进行分组,那么相似的候选将是:

1st set: Doc1, Doc3
2nd set: Doc2, Doc4
3rd set: Doc1, Doc2, Doc3

所以现在我要做的就是计算单个集合中每个候选者之间的汉明距离。

我尝试在其中实现映射器:

输入

Key 是 LongWritable 偏移量

值是文档文本

输出

键是带#+位串

值是文档文本。

但现在我对减速器感到困惑。我不想在最终数据集中发生冲突,但有什么保证。我对键值输出应该是什么感到困惑?


更新(更多解释) 如果reducer输入Key是band#+位串,Value是具有相同band的文档。 例如

Band0+{101} = Doc1,Doc3

可以计算汉明距离以了解重复文档。但是每个组(集合)可能在一个或多个文档中存在冲突,因为不能保证相同的文档最终会出现在同一个 reducer 中。

例如,如果第一组是 Doc1,Doc2,Doc3,第二组是 Doc2,Doc3,Doc4。并且 Doc2 和 Doc3 是重复的 如何将唯一的文档输出为 Doc1、Doc3 和 Doc4?

我遇到了这些问题,但它们对我没有多大帮助:

  1. Deciding key value pair for deduplication using hadoop mapreduce
  2. How to implement LSH by MapReduce?

[1] M. Charikar,“舍入算法的相似度估计技术”,Proc。第 34 届计算理论年度研讨会 (STOC),2008 年,第 380-388 页。

【问题讨论】:

    标签: java hadoop mapreduce deduplication


    【解决方案1】:

    对于每个可以发出 0 个或多个输出的文档,您可以执行以下操作:

    Input1: Doc1
    Outputs
      key1: band0101, value1: Doc1
      key2: band1110, value2: Doc1
    
    (one output for each band)
    
    Input2: Doc2
    Outputs
      key1: band0100, value1: Doc2
      key2: band1110, value2: Doc2
    .
    .
    .
    

    在 reducer 中使用这种方法,您将获得所有文档列表,其中包含分组的键字符串 band0101。对于 band0100、band1110 等也是如此。

    【讨论】:

    • 感谢您的回答。嗯,你是对的,然后我可以测量每个组之间的汉明距离以了解重复文件。但是每个组可能在一个或多个文档中存在冲突,因为不能保证相同的文档最终会出现在同一个 reducer 中。例如,如果第一组是 Doc1,Doc2,Doc3,第二组是 Doc2,Doc3,Doc4。并且 Doc2 和 Doc3 是重复的如何将唯一文档输出为 Doc1、Doc3 和 Doc4?
    • 一个选项是拥有多个 MapReduce 作业。在第一个作业中,您可以识别重复的文档,在第二个作业中,您可以过滤重复的文档以在输出中删除它们。挑战在于始终保持同一个文档并丢弃另一个文档。
    • 在您的示例中:OutputGroup1 -> (Doc1ID, Doc1), (Doc2ID, ), (Doc3ID, Doc3) __ OutputGroup2 -> (Doc2ID,要删除,那么您就不会在输出中写入该文档(可能在一组中,文档 2 被标记为重复,而在另一组中则没有)。
    猜你喜欢
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    相关资源
    最近更新 更多