Mam CSVplik 35 GB . Chcę przeczytać każdą linię i napisać linię do nowego pliku CSV, jeśli pasuje do określonego warunku.
try (BufferedWriter writer = Files.newBufferedWriter(Paths.get("source.csv"))) {
try (BufferedReader br = Files.newBufferedReader(Paths.get("target.csv"))) {
br.lines().parallel()
.filter(line -> StringUtils.isNotBlank(line)) //bit more complex in real world
.forEach(line -> {
writer.write(line + "\n");
});
}
}
To zajmuje około 7 minut. Czy można jeszcze bardziej przyspieszyć ten proces?
parallelgo przyspieszy? I czy to nie przesuwa linii wokół?
BufferedWritersiebie, używając konstruktora, który pozwala ustawić rozmiar bufora. Być może większy (lub mniejszy) rozmiar bufora zrobi różnicę. Spróbowałbym dopasować BufferedWriterrozmiar bufora do rozmiaru bufora systemu operacyjnego hosta.