首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UniVocity CSV解析器做变长?

UniVocity CSV解析器做变长?
EN

Stack Overflow用户
提问于 2016-02-22 21:53:04
回答 1查看 263关注 0票数 1

我有一个2600万行数据集,当我尝试用uniVocity解析器解析它时,它只将它读取为1800万行。我的行字段计数从158到162不等,分隔符为ASCII '\u0001‘。

来自linux >>>> wc -l withHeader.dat 26351323 withHeader.dat的wc -l输出

但解析器将其读取为文件中的行总数#= 18554088 (来自list.size of parser.parseAll()的输出)

有人能解释一下这个问题是什么吗?

这是我的parserSettings

代码语言:javascript
复制
    settings.getFormat().setLineSeparator("\n");
    settings.selectFields("acctId","tcat", "transCode");
    settings.getFormat().setDelimiter('\u0001');
    //settings.setAutoConfigurationEnabled(true);
    //settings.setMaxColumns(86);
    settings.setHeaderExtractionEnabled(false);

    // creates a CSV parser
    CsvParser parser = new CsvParser(settings);
    // parses all rows in one go.
    List<String[]> allRows = parser.parseAll(newReader(filePath));
    System.out.println("Total # of rows in file = " + allRows.size());
EN

回答 1

Stack Overflow用户

发布于 2016-02-23 14:32:35

如果您的值可以包含行分隔符,那么解析记录的数量将不等于行数。

如果不是这样的话,那么很可能您没有正确地配置格式。您可能需要配置引号、引号转义等。

我的第一个建议是尝试用以下方法自动检测格式:

代码语言:javascript
复制
settings.detectFormatAutomatically();

解析之后,检查是否有希望找到的行计数。您可以通过调用:

代码语言:javascript
复制
CsvFormat detectedFormat = parser.getDetectedFormat();

请记住,这一过程并不一定能奏效,但在大多数情况下,它确实起了作用。这些特性可在2.0.0版中使用。

如果没有任何帮助,请附加(部分)您的输入文件,以便我可以查看和更新我的答案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35564679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档