我有450萬個條目的空間分離的數據文件中的格式如下如何迭代處理大數據文件?
CO_1 A 0 0 0 0 1
CO_2 A 0 0 0 0 1
該數據文件被用作Self-Organizing Map (SOM)算法的輸入,該算法遍歷該文件100(在我的情況下)迭代。
我使用下面的readFile函數將文件完全複製到臨時字符串中,並將該字符串傳遞給SOM算法。
public String readFile()
{
String temp = "";
try
{
FileReader file = new FileReader(FILE_LOCATION);
BR = new BufferedReader(file);
String strLine = null;
while((strLine = BR.readLine()) != null)
{
temp += strLine + "\n";
}
}
catch(Exception e)
{
}
return temp;
}
如何過,我覺得上面的方法把一個沉重的負擔,對內存和減慢,可能導致內存溢出的迭代。目前,我在具有30GB內存分配的集羣中運行此代碼,並且執行甚至還沒有完成約36小時的一次迭代。
我不能部分讀取文件(如在塊的行中),因爲一旦初始塊完成後SOM將不得不輪詢數據,這可能導致進一步的複雜性。
任何想法,我可以改善這一點,所以我可以成功迭代450萬條目100次。
EDIT
整個文件被讀入到使用上述方法僅一次的字符串。然後在整個100次迭代中使用字符串變量。但是,每次字符串標記器已被用來處理文件*迭代次數中的每一行。
你能用更高效的數據結構來表示你的文件嗎?例如,如何使用''map.put(1,new BitSet())''形式的條目''Map''''''您可以使用鍵「1」來表示字符串''CO_1''和一個包含「0 0 0 0 1''的位集來表示你的字符串的其餘部分? –
gdiazc
@Synex你有沒有嘗試分析你的代碼,看看哪部分是最長的? – Alan
@Alan no我沒有。有什麼建議麼?我正在使用Eclipse IDE – Synex