我有一个2600万行数据集,当我尝试用uniVocity解析器解析它时,它只读取1800万行。 我的行字段数从158到162不等,分隔符为ASCII'\ u0001'。
来自linux>>>>的wc -l输出wc -l withHeader.dat 26351323 withHeader.dat
但解析器将其读取为文件中的总行数= 18554088 (从parser.parseAll()的list.size输出)
有人可以解释可能出现的问题吗?
这是我的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());
答案 0 :(得分:1)
如果您的值可以包含行分隔符,则解析的记录数不会等于行数。
如果情况并非如此,那么您可能无法正确配置格式。您可能需要配置引号,引用转义等。
我的第一个建议是尝试使用以下方法自动检测格式:
settings.detectFormatAutomatically();
解析后,检查您是否获得了预期的行数。您可以通过调用
来获取已检测到的内容CsvFormat detectedFormat = parser.getDetectedFormat();
请记住,此过程不能保证有效,但在大多数情况下,它可以解决问题。这些功能从版本2.0.0开始提供。
如果没有任何帮助,请附上(部分)输入文件,以便我查看并更新我的答案。