2012-08-14 47 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

相關問題