代码之家  ›  专栏  ›  技术社区  ›  Boolean

将长字符串读入内存

  •  1
  • Boolean  · 技术社区  · 14 年前

    谢谢

    4 回复  |  直到 14 年前
        1
  •  4
  •   hd42    14 年前

    你的大绳子是从哪里来的?就像你说你读过的,我猜它来自一个文件。你必须知道整根弦才能知道在哪里把它分开吗?如果没有,你可以一个字符一个字符地读取文件,直到找到一个拆分标记,把所有读到的字符放在一个字符串中,然后开始读取下一个字符串。你能大致知道你刚读到的一个字符串在哪里排序吗?如果是这样,您可以在第一次运行时将部分字符串写入单独的文件(例如,当您按字母顺序排序字符串时,以go to A.tmp开头的所有字符串)。之后,您可以对创建的文件的内容进行排序(希望现在小到可以放入内存),最后将内容附加到新的输出文件中。

        2
  •  2
  •   keshav84    14 年前

        3
  •  1
  •   Niels Basjes    14 年前

    如果您想让Hadoop“逐行”处理100gib的apache日志文件,那么您实际上是在做您想要做的事情:将大量的文本分割成几段。

    TextInputFormat 它使用 LineRecordReader 它使用 LineReader 在“行尾”分隔符上拆分文本文件。你想要的基本上是一样的,但有一点不同:在不同的事情上分裂。

    See the Hadoop example the explanation in Tom's book ).

    所以我建议你

    1. 文本输入格式 行记录读取器 /
    2. 创建一个重写信息以进行二次排序的映射。
    3. 创建正确的分区、组和键比较器类/方法来进行排序。
    4. 创建一个reduce,从中接收排序后的信息,以便进一步处理。

        4
  •  0
  •   Qubeuc    14 年前