Tengo un CSV
archivo de 35 GB . Quiero leer cada línea y escribir la línea en un nuevo CSV si coincide con una condición.
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");
});
}
}
Esto toma aprox. 7 minutos ¿Es posible acelerar ese proceso aún más?
parallel
hace más rápido? ¿Y eso no mezcla las líneas?
BufferedWriter
usted mismo, utilizando el constructor que le permite establecer el tamaño del búfer. Tal vez un tamaño de búfer más grande (o más pequeño) hará la diferencia. Intentaría hacer coincidir el BufferedWriter
tamaño del búfer con el tamaño del búfer del sistema operativo del host.