我正在使用BufferReader.readlLine()
逐行处理大量文本文件。BufferedReader性能低下
两个大小相同的文件130MB,但一个需要40秒才能处理,而其他需要75秒。
我注意到一个文件有180万行,而其他文件有210万。但是当我试图处理一个具有相同大小的300万行的文件时,需要30分钟来处理。
所以我的问题是:
这种行为是因为寻求缓冲读者的时间(我想知道如何
BufferedReader
作品或线分析文件行?)有我可以用更快的方式逐行读取文件的任何方式?
好的朋友,我提供了一些更多的细节。我使用正则表达式将行分成三部分,然后使用SimpleUnsortedWriter
(由Cassandra提供)我将它作为键,列和值写入某个文件。处理16MB数据后,它将刷新到磁盘。
但是处理逻辑对于所有文件都是一样的,即使是一个大小为330MB的文件,但是在100万个左右的行中没有更少的文件在30秒内得到处理。可能是什么原因?
deviceWriter = new SSTableSimpleUnsortedWriter(
directory,
keyspace,
"Devices",
UTF8Type.instance,
null,
16);
Pattern pattern = Pattern.compile("[\\[,\\]]");
while ((line = br.readLine()) != null)
{
//split the line i n row column and value
long timestamp = System.currentTimeMillis() * 1000;
deviceWriter .newRow(bytes(rowKey));
deviceWriter .addColumn(bytes(colmName), bytes(value), timestamp);
}
物是人非-Xmx256M to -Xmx 1024M
但不反正帮助。根据我的观察,当我正在写入缓冲区(在物理内存中)时,作为第一个物理内存。写入缓冲区的次数越来越多,新的写入需要时间。 (这是我的猜测)
请回复。
请张贴您使用BufferReader的代码 – razlebe
也许它不必与BufferedReader一起使用,而是使用每行处理。 – Marcelo