Procesowanie dużego pliku, wydajność

Procesowanie dużego pliku, wydajność
tomek1221
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 84
0

Cześć,

Mam duży plik CSV na dysku (ponad 2GB), chcę w jak najkrótszym czasie:

  • czytam wiersz
  • tnę go, żeby mieć dostęp do każdej wartości
  • wsadzam w jakiś model
  • wrzucam na kolejke

Jak to zrobić, żeby było szybko i dobrze? Myślałem, żeby użyć parallel streamów

Kopiuj
public void processFile() {

        try {
            Stream<String> lines = Files.lines(Paths.get(path, fileName));
            lines.parallel().forEach( csvRow -> {
                csvRow.split(";");
                // ... i dalej wsadzanie wartości w obiekt, następnie obiekt wysyłany na kolejke
            });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Będę wdzięczny za rady

S9
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 3573
1

@tomek1221:
1)Ja bym zamiast tego try zrobił try-with-resources

Kopiuj
try(Stream<String> lines = Files.lines(path)) {
 //code
} catch(IOException e) {
//handle with an exception
}

2). To jakaś aplikacja webowa? To CRON odpalany w nocy? Musisz wiedzieć że parallel stream będzie korzystać ze wspólnej puli watków...

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.