gpt4 book ai didi

java - 尽可能快地通过java读取具有数百万行的csv文件

转载 作者:太空狗 更新时间:2023-10-29 22:55:39 58 4
gpt4 key购买 nike

我想读取一个包含数百万行的 csv 文件,并将这些属性用于我的决策树算法。我的代码如下:

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);
}

当csv 文件不大时,它工作正常。然而,它确实很大。因此我需要另一种方法来更快地读取 csv。有什么建议吗?非常感谢,谢谢。

最佳答案

只需使用 uniVocity-parsers ' CSV 解析器,而不是尝试构建您的自定义解析器。您的实现可能不够快或不够灵活,无法处理所有极端情况。

它的内存效率极高,您可以在不到一秒的时间内解析一百万行。 This link对许多 java CSV 库进行了性能比较,univocity-parsers 名列前茅。

这是一个如何使用它的简单示例:

CsvParserSettings settings = new CsvParserSettings(); // you'll find many options here, check the tutorial.
CsvParser parser = new CsvParser(settings);

// parses all rows in one go (you should probably use a RowProcessor or iterate row by row if there are many rows)
List<String[]> allRows = parser.parseAll(new File("/path/to/your.csv"));

但是,这会将所有内容加载到内存中。要流式传输所有行,您可以这样做:

String[] row;
parser.beginParsing(csvFile)
while ((row = parser.parseNext()) != null) {
//process row here.
}

更快的方法是使用 RowProcessor ,它还提供了更大的灵 active :

settings.setRowProcessor(myChosenRowProcessor);
CsvParser parser = new CsvParser(settings);
parser.parse(csvFile);

最后,它有内置的 routines使用解析器执行一些常见任务(迭代 java bean、转储 ResultSet 等)

这应该涵盖基础知识,请查看文档以找到适合您情况的最佳方法。

披露:我是这个图书馆的作者。它是开源且免费的(Apache V2.0 许可)。

关于java - 尽可能快地通过java读取具有数百万行的csv文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36341059/

58 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com