簡體   English   中英

Java-排序和CSV:海量數據的良好實踐

[英]Java - Sorting and csv: good practice with huge data

我需要使用Java中的幾種算法訂購一個巨大的csv文件(10+百萬條記錄),但內存量存在一些問題。

基本上我有一個巨大的csv文件,其中每個記錄都有4個字段,具有不同的類型(字符串,整數,雙精度)。 我需要將此csv加載到某種結構中,然后按所有字段對其進行排序。

我的想法是:編寫一個Record類(具有自己的字段),開始逐行讀取csv文件,為每一行創建一個新的Record對象,然后將它們放入ArrayList中。 然后為每個字段調用我的排序算法。

它無法正常工作。當我嘗試將所有Record對象加載到ArrayList中時,出現了OutOfMemoryException異常。

這樣,我創建了大量對象,我認為這不是一個好主意。 當我擁有大量數據時該怎么辦? 就內存使用而言,哪種方法/數據結構可以便宜一些?

我的觀點只是使用排序算法,並查看它們如何處理大量數據,將排序結果保存到文件中並不重要。

我知道有一些csv的庫,但是我應該在沒有外部庫的情況下實現它。

非常感謝你! :D

將您的文件切成碎片(取決於文件的大小),然后進行合並排序。 這樣,您甚至可以在不占用大量內存的情況下對大型文件進行排序,而這正是數據庫在進行大量排序時所使用的。

我會在內存模式下使用內存數據庫(例如h2)( jdbc:h2:mem:),以便所有內容都保留在ram中且不會刷新到磁盤(前提是您有足夠的ram,如果不是,則可能要使用基於文件的網址)。 在其中創建表格,然后從csv中寫入每一行。 只要您正確設置索引,使用標准sql即可輕松進行排序和分組

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM