Eu tenho um CSV
arquivo de 35GB . Quero ler cada linha e gravar a linha em um novo CSV, se corresponder a uma condição.
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");
});
}
}
Isso leva aprox. 7 minutos. É possível acelerar ainda mais esse processo?
parallel
torna mais rápido? E isso não embaralha as linhas?
BufferedWriter
você mesmo, usando o construtor que permite definir o tamanho do buffer. Talvez um tamanho de buffer maior (ou menor) faça a diferença. Eu tentaria corresponder o BufferedWriter
tamanho do buffer ao tamanho do buffer do sistema operacional do host.