【问题标题】:Parsing CSV files to arrays from very large sources in java将 CSV 文件从 Java 中的非常大的源解析为数组
【发布时间】:2015-08-29 21:12:56
【问题描述】:

我有一个解析器,可以很好地处理大约 . 60000 行或更少,但我必须解析超过 1000 万行的 CSV 文件,这种方法不起作用,它每 100000 行挂起 10 秒,我假设它是拆分方法,是否有更快的方法来解析数据从 CSV 到字符串数组?

有问题的代码:

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

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

【问题讨论】:

  • 您确定要同时在内存中保留这么多条目吗?

标签: java parsing csv optimization


【解决方案1】:

你可能想试试我刚刚发布的库:sesseltjonna-csv

它使用 ASM 在运行时动态生成 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 许可)。

    【讨论】:

      【解决方案3】:

      根据经验,使用库通常比内部开发更有效。有几个库提供读取/解析 csv 文件。最受欢迎的之一是Apache Commons CSV

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-04
        • 2020-01-31
        • 2014-10-19
        • 2011-09-25
        • 2017-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多