2012-08-14 40 views
1

我试图使用Sphinx Search Server来索引一个非常大的文件(大约14GB)。 该文件是空白分隔的,每行一个条目。解析大文件(10 + gb)并在另一个文件中写入内容

为了能够在Sphinx中使用它,我需要为Sphinx服务器提供一个xml文件。 我怎样才能不杀我的电脑?

什么是最佳策略?我应该尝试在几个小文件中拆分主文件吗?什么是最好的方式来做到这一点?

注:我在Ruby中这样做,但我完全开放给其他提示。

谢谢你的时间。

回答

0

我讨厌在问题后不写解决方案的人。所以我会尽力不要成为他们中的一员,希望它能帮助别人。

我在File类中添加了一个简单的阅读器方法,然后根据我选择的块大小使用它来循环文件。实际上很简单,像狮身人面像魅力一样工作。

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 
+0

因此,这解决了您的原始问题? – 2012-09-28 23:51:57

0

我认为主要想法是逐行解析主文件,同时生成结果XML。每当它变得足够大时,将它送到狮身人面像。冲洗并重复。

0

你需要做什么解析?如果转换被限制在一次只输入一行,而不是太复杂,我会使用awk而不是Ruby ...

+0

我设法做到这一点在Ruby中,谢谢! – 2012-09-28 15:13:35

相关问题