Самый быстрый и эффективный способ для анализа большого файла CSV в Java - PullRequest
0 голосов
/ 05 июня 2019

Я хочу проанализировать большой CSV-файл как можно быстрее и эффективнее.

В настоящее время я использую библиотеку openCSV для анализа моего CSV-файла, но для анализа CSV-файла требуется около 10 секунд.10776 записей с 24 заголовками, и я хочу проанализировать файл CSV с миллионами записей.

<dependency>
  <groupId>com.opencsv</groupId>
  <artifactId>opencsv</artifactId>
  <version>4.1</version>
</dependency>

Я использую синтаксический анализ библиотеки openCSV, используя приведенный ниже фрагмент кода.

public List<?> convertStreamtoObject(InputStream inputStream, Class clazz) throws IOException {
        HeaderColumnNameMappingStrategy ms = new HeaderColumnNameMappingStrategy();
        ms.setType(clazz);
        Reader reader = new InputStreamReader(inputStream);

        CsvToBean cb = new CsvToBeanBuilder(reader)
                .withType(clazz)
                .withMappingStrategy(ms)
                .withSkipLines(0)
                .withSeparator('|')
                .withFieldAsNull(CSVReaderNullFieldIndicator.EMPTY_SEPARATORS)
                .withThrowExceptions(true)
                .build();
        List<?> parsedData = cb.parse();
        inputStream.close();
        reader.close();
        return parsedData;
    }

Яищет предложения по другому способу анализа файла CSV с миллионами записей за меньшее время.

--- обновил ответ ----

 Reader reader = new InputStreamReader(in);
        CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT
                .withFirstRecordAsHeader()
                .withDelimiter('|')
                .withIgnoreHeaderCase()
                .withTrim());
        List<CSVRecord> recordList = csvParser.getRecords();
        for (CSVRecord csvRecord : recordList) {
             csvRecord.get("headername");
         }

1 Ответ

0 голосов
/ 07 июня 2019

Ответ

Reader reader = new InputStreamReader(in);
        CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT
                .withFirstRecordAsHeader()
                .withDelimiter('|')
                .withIgnoreHeaderCase()
                .withTrim());
        List<CSVRecord> recordList = csvParser.getRecords();
        for (CSVRecord csvRecord : recordList) {
             csvRecord.get("headername");
         }
...