【问题标题】:Parse huge file (10+gb) and write content in another one解析大文件(10+gb)并将内容写入另一个文件
【发布时间】:2012-08-14 09:47:15
【问题描述】:

我正在尝试使用Sphinx Search Server 来索引一个非常大的文件(大约 14gb)。 该文件以空格分隔,每行一个条目。

为了能够将它与 Sphinx 一起使用,我需要向 Sphinx 服务器提供一个 xml 文件。 我怎样才能在不杀死我的计算机的情况下做到这一点?

什么是最好的策略?我应该尝试将主文件拆分为几个小文件吗?最好的方法是什么?

注意:我是用 Ruby 做的,但我完全愿意接受其他提示。

感谢您的宝贵时间。

【问题讨论】:

    标签: ruby file parsing io


    【解决方案1】:

    我认为主要思想是逐行解析主文件,同时生成结果 XML。每次它变得足够大时,就可以将它喂给狮身人面像。冲洗并重复。

    【讨论】:

      【解决方案2】:

      你需要做什么解析?如果转换一次仅限于输入中的一行并且不太复杂,我会使用 awk 而不是 Ruby...

      【讨论】:

        【解决方案3】:

        我讨厌在提出问题后不写解决方案的人。所以我会尽量不要成为他们中的一员,希望它会对某人有所帮助。

        我向 File 类添加了一个简单的读取器方法,然后使用它根据我选择的块大小循环文件。实际上很简单,就像 Sphinx 的魅力一样。

        class File
        
          # New static method
          def self.seq_read(file_path,chunk_size=nil)
            open(file_path,"rb") do |f|
              f.each_chunk(chunk_size) do |chunk|
                yield chunk
              end
            end
          end
        
          # New instance method
          def each_chunk(chunk_size=1.kilobyte)
            yield read(chunk_size) until eof?
          end
        
        end
        

        然后像这样使用它:

        source_path = "./my_very_big_file.txt"
        CHUNK_SIZE  = 10.megabytes
        File.seq_read(source_path, CHUNK_SIZE) do |chunk|
          chunk.each_line do |line|
            ...
          end
        end
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-05-14
          • 2011-04-24
          • 2017-06-21
          • 1970-01-01
          • 1970-01-01
          • 2015-05-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多