我有一个2600万行数据集,当我尝试用uniVocity解析器解析它时,它只将它读取为1800万行。我的行字段计数从158到162不等,分隔符为ASCII '\u0001‘。
来自linux >>>> wc -l withHeader.dat 26351323 withHeader.dat的wc -l输出
但解析器将其读取为文件中的行总数#= 18554088 (来自list.size of parser.parseAll()的输出)
有人能解释一下这个问题是什么吗?
这是我的parserSettings
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());发布于 2016-02-23 14:32:35
如果您的值可以包含行分隔符,那么解析记录的数量将不等于行数。
如果不是这样的话,那么很可能您没有正确地配置格式。您可能需要配置引号、引号转义等。
我的第一个建议是尝试用以下方法自动检测格式:
settings.detectFormatAutomatically();在解析之后,检查是否有希望找到的行计数。您可以通过调用:
CsvFormat detectedFormat = parser.getDetectedFormat();请记住,这一过程并不一定能奏效,但在大多数情况下,它确实起了作用。这些特性可在2.0.0版中使用。
如果没有任何帮助,请附加(部分)您的输入文件,以便我可以查看和更新我的答案。
https://stackoverflow.com/questions/35564679
复制相似问题