【问题标题】:Running two instances of R in order to improve large data reading performance运行两个 R 实例以提高大数据读取性能
【发布时间】:2013-07-17 19:04:17
【问题描述】:

我想读入一些 CSV 文件 (~50),运行一些操作,然后使用write.csv() 输出一个主文件。由于 CSV 文件较大(~80 Mb),我想知道打开两个 R 实例是否更有效,在一个实例上读取一半的 CSV,在另一个实例上读取一半。然后我会将每个写入一个大的 CSV,读入两个 CSV,并将它们组合成一个主 CSV。有谁知道运行两个 R 实例是否会缩短读取所有 csv 的时间?

我使用的是配备 4Gb RAM 的 Macbook Pro OSX 10.6。

【问题讨论】:

标签: r performance


【解决方案1】:

如果您的大部分代码执行时间都花在读取文件上,那么它可能会更慢,因为两个 R 进程将竞争磁盘 I/O。但如果大部分时间都花在“运行多个操作”上,它会更快。

【讨论】:

  • 核心数量也很重要。 R 没有受过多核处理方面的教育,并且给定“操作”的每个实例都将填充一个核心。
【解决方案2】:

read.table() 和相关的可能会很慢。 判断您是否可以从并行化中受益的最佳方法是为您的 R 脚本计时,以及对文件的基本阅读。例如,在终端中:

time cat *.csv > /dev/null

如果“cat”时间显着降低,则您的问题不是 I/O 限制的,您可能 并行化。在这种情况下,您可能应该使用 parallel 包,例如

library(parallel)
csv_files <- c(.....)
my_tables <- mclapply(csv_files, read.csv)

【讨论】:

  • 我不确定这是否有效,看起来 read.csv 会阻止并发读取,但我不确定。
猜你喜欢
  • 1970-01-01
  • 2019-12-24
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 2020-09-03
  • 2021-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多