我有数千个文件(50K),每个文件大约有10K行。我读取文件并进行一些处理,然后将这些行写回输出文件。虽然我的读取和处理速度更快,但将字符串迭代器转换回单个字符串并将其写入文件的最终步骤需要很长时间(几乎一秒钟)。我不会为整个文件群体做这件事情的数学计算,它们大约有50K个文件。我认为这是提高解析时间瓶颈的原因。
这是我的代码。
这是我的代码。
var processedLines = linesFromGzip(new File(fileName)).map(line => MyFunction(line))
var outFile = Resource.fromFile(outFileName)
outFile.write(processedLines.mkString("\n")) // severe overhead caused by this line-> processedLines.mkString("\n")
我在其他论坛/博客上读到,mkString比其他方法更好。(例如)
有没有比mkString("\n")更好的选择?有没有完全不同的方法可以提高我的文件处理速度。(记住,我有50K个文件,每个文件接近10K行。)
processedLines.mkString("\n")
中,你正在迭代处理过的行以附加\n
。然后下一次写入新生成的长字符串到文件时。 - JatinoutFile
是什么类型?我的意思是它是 BufferedWriter 还是其他什么类型?如果它不缓冲,那么会消耗额外的时钟周期。 - JatinoutFile.writeStrings
而不是outFile.writeStrings(processedLines,"\n")
(http://jesseeichar.github.io/scala-io-doc/0.3.0/api/scalax/io/SeekableByteChannelResource.html)。但我仍然认为,BufferedWriter应该是最快的方法。 - Jatinfor(x <-processedLines){ bufferedWriter.write(x); bufferedWriter.write("\n"); }
- Jatin