【问题标题】:Performing text data inside loops在循环内执行文本数据
【发布时间】:2014-05-18 05:31:26
【问题描述】:

我有一个大小为 1 TB 的 Json 文件。每个Json Object 是一个包含 500-600 个字的文本。有 5000 万个 Json 对象。

现在这就是我对这个 Json 文件要做的事情。我需要在网页中插入 200-300 个单词和一个百分比值。完成此操作后,Web 应用程序将读取整个 Json 文件,检查插入的单词是否在任何 Json 对象中可用,以及可用的百分比是多少。如果可用性百分比高于我插入的百分比,则此应用程序还将跟踪 Json 对象中可用的单词与输入列表的比较以及 Json 对象中缺失的单词与输入列表的比较。

我觉得读1TB太大了,所以我做了一个技巧。我将每个Json Object 中的文本转换为散列(这个散列代表任何包含 3 个字符的单词)并将其保存到文本文件中。现在,这个文本文件的每一行中的哈希都代表了特定 Json 对象中的文本。这个文本文件有 120GB 大。 5000 万行。

我的问题是阅读和执行上述工作仍然更难。需要几个小时才能完成!为什么?因为应用程序读取此哈希中的“每一”行,所以搜索哪些单词可用,哪些单词不可用。所以这个“检查”算法运行了 5000 万次!

有什么方法可以减少此操作的时间并在几秒钟内完成?我知道在化学和遗传医学中的应用会在几秒钟内完成完全相同的事情!我对所有解决方案持开放态度,无论是大数据解决方案、数据挖掘还是简单修复,等等。

PS:我想到了一个基于 Hadoop 的解决方案,但购买了很多计算机。这是一个巨大的成本,即使在亚马逊上运行也是双倍的成本!

【问题讨论】:

    标签: java text for-loop data-mining bigdata


    【解决方案1】:

    当然,你必须朝着像lucene这样的反向索引的方向走。反向索引的大小更受文档数量的不同单词数量的影响。查找单词时,您会直接获得包含它的文档的 ID,从而获得此类对象的数量以及百分比。到目前为止很简单。我想一个有 10 - 30 台机器的小集群应该没问题。也许弹性搜索在这里是个不错的选择。

    【讨论】:

    • 我还没有钱买 10 台机器,目前的主要问题。
    • 我会说,使用反向索引,无论有多少机器,你都比现在好得多。使用普通台式机应该可以花费几分钟。经过几个小时的建立当然索引。更多机器将改善索引构建和访问时间。
    猜你喜欢
    • 1970-01-01
    • 2019-11-30
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 2021-03-26
    相关资源
    最近更新 更多