【问题标题】:Parsing bulk text with Hadoop: best practices for generating keys使用 Hadoop 解析批量文本:生成密钥的最佳实践
【发布时间】:2010-07-28 03:22:51
【问题描述】:

我正在使用 Hadoop 处理一组“大型”行分隔的完整句子。我开发了一个映射器,它应用了一些我最喜欢的 NLP 技术。我在原始句子集上映射了几种不同的技术,我在缩减阶段的目标是将这些结果收集到组中,以便组中的所有成员共享相同的原始句子。

我觉得使用整个句子作为键是一个坏主意。我觉得由于键的数量有限(不合理的信念),生成句子的一些哈希值可能不起作用。

谁能推荐为每个句子生成唯一键的最佳想法/实践?理想情况下,我想保持顺序。但是,这不是主要要求。

Avτίο,

【问题讨论】:

    标签: nlp hadoop


    【解决方案1】:

    标准散列应该可以正常工作。大多数哈希算法的值空间远远大于您可能使用的句子数量,因此发生冲突的可能性仍然非常低。

    【讨论】:

    • 你能给我粗略的价值空间数据吗?我需要扩展应用程序,并且担心我的测试环境中有解决方案,但以后会出现问题。
    • SHA-1 输出 160 位散列,其值空间为 2^160 个元素...我有点怀疑你的句子会多于,哦,2^40 或所以(对于平均句子长度中的每个字符来说,这将是一个 TB)。
    【解决方案2】:

    尽管我已经为您提供了关于什么是适当的散列函数的答案,但我真的建议您只使用句子本身作为键,除非您有特定的原因说明这是有问题的。

    【讨论】:

      【解决方案3】:

      尽管您可能希望避免使用简单的哈希函数(例如,任何您可以快速想到的半生不熟的想法),因为它们可能不会将句子数据混合到足以避免冲突的程度,但标准之一加密哈希函数可能非常适合,例如 MD5、SHA-1 或 SHA-256。

      您可以为此使用 MD5,即使 collisions have been found 和算法被认为是不安全的安全密集型目的。这不是一个安全关键应用程序,发现的冲突是通过精心构建的数据产生的,并且可能不会在您自己的 NLP 句子数据中随机出现。 (例如,请参阅 Johannes Schindelin 解释为什么可能没有必要将 git 更改为使用 SHA-256 哈希,以便您了解其背后的原因。)

      【讨论】:

        猜你喜欢
        • 2015-04-24
        • 1970-01-01
        • 2017-04-20
        • 2023-02-21
        • 2019-07-30
        • 2011-09-23
        • 2022-11-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多