2015-06-14 33 views
3

我有一個解析器,它可以在大約4GB的較小文件上正常工作。 60000行或更少,但我不得不解析一個超過1000萬行的CSV文件,這種方法不工作,它每隔10萬行掛起10萬行,我認爲它是拆分方法,有沒有更快的方法來解析數據從CSV到字符串數組?將CSV文件解析爲來自java中非常大的源的數組

代碼中的問題:

String[][] events = new String[rows][columns]; 
    Scanner sc = new Scanner(csvFileName); 

    int j = 0; 
    while (sc.hasNext()){ 
     events[j] = sc.nextLine().split(","); 
     j++; 
    } 
+1

你確定,你想同時在內存中保存這麼多條目嗎? – Sirko

回答

1

作爲一個經驗法則,使用圖書館通常比內部開發更有效率。有幾個庫提供讀取/解析csv文件。其中一個比較流行的是Apache Commons CSV

2

您的代碼不會可靠地解析CSV文件。如果在某個值中有「,」或行分隔符,該怎麼辦?這也很慢。

獲取uniVocity-parsers來解析您的文件。它比Apache Commons CSV快3倍,還有更多功能,我們用它來處理數十億行的文件。

解析所有行到一個字符串列表:

CsvParserSettings settings = new CsvParserSettings(); //lots of options here, check the documentation 

CsvParser parser = new CsvParser(settings); 

List<String[]> allRows = parser.parseAll(new FileReader(new File("path/to/input.csv"))); 

披露:我是這個庫的作者。它是開放源代碼和免費的(Apache V2.0許可證)。