异步写入 R 中的文件

Posted

技术标签:

【中文标题】异步写入 R 中的文件【英文标题】:Asynchronous writes to a file in R 【发布时间】:2012-08-31 10:49:17 【问题描述】:

谁能为我提供一些关于如何从一个非常大的文件块中异步写入的指导,每个文件都在多个集群 (8-500) 中使用相同的函数进行处理。该文件大约 25 GB,太大而无法放入内存。

我们目前正在使用“snow(fall)”和“mmap”包,但无法克服一些瓶颈。同步写入工作正常,但异步写入效率更高。

我不确定您还需要什么信息,但请随时问我!

【问题讨论】:

我刚刚发现了这个问题:***.com/questions/1396632/… 如果有任何人可以提供的任何额外信息,请告诉我! 你为什么不告诉我们一些你的文件?另外我不明白“大文件”和“异步写入”之间的相关性 - 解释一下。 文件为 25GB(最终扩展至 TB)光栅图像。这个想法是,因为它们太大了,所以将它们分成尽可能多的集群是可行的方法。异步 I/O 是我们前进的方向。如果大小和异步性不相关,请原谅我......我可能对整个问题有一些基本的误解!编辑:这个想法可能是我们希望在将图像字节写入磁盘后立即开始处理它们,而无需等待其他集群完成计算。这会给我们带来巨大的性能提升。 所以你有两个问题;如何处理集群中的大文件,以及如何高效地写入文件。我建议你把你的问题一分为二。此外,输入格式是否与输出格式相同,您是否正在写入您正在读取的同一个文件,并且您是否正在写入相同的大小?请注意,如果您将问题拆分为单独的进程,则不需要异步写入 - 您可以先将文件拆分为块,然后再重新组合它们吗? 如果您提供一个不需要分块或异步写入的非常小的文件的工作示例,或许将一个小的输入文件上传到网络,这对您真的很有帮助? 【参考方案1】:

也许你可以使用

sink("filename.any_extension")

所以使用它会在收到命令后立即在文本文件中输出结果,并进一步处理您的结果,人们可以使用

readLines("filename.any_extension",n=-1,warn=TRUE).

我希望这会有所帮助。

【讨论】:

这没有回答问题(在问题的 cmets 中已澄清)。 常见。你是认真的吗 ? R 以异步方式工作。在接收器中,输出是不同步添加的,并且绝对可以通过其他命令(例如 readLines 或 Scan 类型)使用接收器附加的文件。 阅读 cmets。 OP 谈论的是图像文件而不是文本,所以这不能回答问题。 天啊。这很有趣。说真的!我根据您的评论编辑了我的答案。希望这对您有所帮助,先生。

以上是关于异步写入 R 中的文件的主要内容,如果未能解决你的问题,请参考以下文章

将文本行写入R中的文件

将文本行写入R中的文件

如何使用 R 文件中的常量值写入 csv 文件

将矩阵的每一列写入R中的不同文本文件

异步数据附加到ios中的文件?

读取和写入 XML 文件的异步方法