Voglio leggere un file csv contenente milioni di righe e utilizzare gli attributi per la mia decisione Albero algoritmo. Il mio codice è qui sotto:Leggere un file csv con milioni di righe via java il più velocemente possibile
String csvFile = "myfile.csv";
List<String[]> rowList = new ArrayList();
String line = "";
String cvsSplitBy = ",";
String encoding = "UTF-8";
BufferedReader br2 = null;
try {
int counterRow = 0;
br2 = new BufferedReader(new InputStreamReader(new FileInputStream(csvFile), encoding));
while ((line = br2.readLine()) != null) {
line=line.replaceAll(",,", ",NA,");
String[] object = line.split(cvsSplitBy);
rowList.add(object);
counterRow++;
}
System.out.println("counterRow is: "+counterRow);
for(int i=1;i<rowList.size();i++){
try{
//this method includes many if elses only.
ImplementDecisionTreeRulesFor2012(rowList.get(i)[0],rowList.get(i)[1],rowList.get(i)[2],rowList.get(i)[3],rowList.get(i)[4],rowList.get(i)[5],rowList.get(i)[6]);
}
catch(Exception ex){
System.out.printlnt("Exception occurred");
}
}
}
catch(Exception ex){
System.out.println("fix"+ex);
}
Sta funzionando bene quando la dimensione del file csv non è grande. Tuttavia, è davvero grande. Quindi ho bisogno di un altro modo per leggere un csv più veloce. C'è qualche consiglio? Apprezzato, grazie.
Si utilizzano due regex nascoste in una riga ('replaceAll' e' split'). Dato che il tuo CSV è così semplice, ti suggerisco di utilizzare uno splitter, come [Splash di Guava] (http://google.github.io/guava/releases/19.0/api/docs/com/google/common/base/ Splitter.html), che fa il lavoro proprio come previsto (a differenza di 'split' che ha un sacco di problemi). Inoltre, nonostante sia semplice, come puoi essere sicuro che il tuo metodo 'ImplementDecisionTreeRulesFor2012' non sia la causa principale della tua lentezza? –
Forse una libreria può soddisfare le tue esigenze. Vedo che c'è un confronto qui: https://github.com/uniVocity/csv-parsers-comparison – Akah
Perché hai bisogno di 2 loop e 'rowList' per supportarli? Perché non avere un singolo loop che legge in una riga e lo passa a 'ImplementDecisionTreeRulesFor2012'? –