0

我正在尝试完成类似于此线程中描述的内容:如何根据第一列的内容拆分巨大的 csv 文件?

在那里,最好的解决方案似乎是使用 awk 来完成这项工作。但是,我正在处理非常庞大的 csv 文件,并且我想在不创建新副本的情况下拆分文件,因为磁盘 I/O 速度正在扼杀我。有没有办法在不创建新副本的情况下拆分原始文件?

4

2 回答 2

3

我不太确定你在问什么,但如果你的问题是:“我可以在磁盘上获取一个大文件并‘就地’拆分它,这样我就可以得到许多小文件,而不必将这些小文件写入磁盘?”,那么答案是否定的。

您将需要遍历第一个文件并将“段”作为新文件写回磁盘,无论您为此使用 awk、Python 还是文本编辑器。不过,您不需要事先制作第一个文件的副本。

于 2012-06-20T13:57:07.353 回答
0

“分割文件”仍然需要 RAM 和磁盘 I/O。没有办法解决这个问题。这就是世界的运作方式。

但是,您当然可以减少 I/O 绑定进程对系统的影响。一些明显的解决方案是:

  1. 使用 RAM 磁盘来减少磁盘 I/O。
  2. 使用 SAN 磁盘来减少本地磁盘 I/O。
  3. 使用 I/O 调度程序对磁盘 I/O 进行速率限制。例如,大多数 Linux 系统为此目的支持ionice实用程序。
  4. 将文件分块并使用批处理队列来减少 CPU 负载。
  5. 在文件处理期间使用nice来减少 CPU 负载。

如果您正在处理文件,那么您正在处理 I/O。您可以在系统限制内充分利用它。

于 2012-06-20T19:56:03.400 回答