拥有革命企业。想要对目录中的每个121k文件运行2个简单但计算密集的操作,输出到新文件。希望使用一些Revoscaler功能,这些功能与lapply类似地分块/并行处理数据。所以我有lapply(文件列表,函数),但使用更快的Rxdf(revoscaler)函数可能实际完成,因为我怀疑基本lapply永远不会完成。
还有一个Revoscaler版本的lapply?从Revolution Enterprise运行它会自动产生什么东西吗?
我看到parlapply,mclapply(http://www.inside-r.org/r-doc/parallel/clusterApply)...can我在同一台桌面上使用内核运行这些内容?Aws服务器?如果它不是原生的Rxdf函数,我是否可以在Revoscaler中运行这些软件包?我猜那么这是一个更多关于在这种情况下我可以用作“集群”的问题。
答案 0 :(得分:3)
有rxExec
,其行为类似于单核方案中的lapply
,与多核/多进程方案中的parLapply
类似。你可以这样使用它:
# vector of file names to operate on
files <- list.files()
rxSetComputeContext("localpar")
rxExec(function(fname) {
...
}, fname=rxElemArg(files))
这里,func
是在文件上执行所需操作的函数;然后将其传递给rxExec
,就像你lapply
一样。 rxElemArg
函数告诉rxExec
对func
的每个不同值执行files
。将计算上下文设置为"localpar"
会启动本地从属进程集群,因此操作将并行运行。默认情况下,从属数量为4,但您可以使用rxOptions(numCoresToUse)
更改此值。
您期望获得多少加速?这取决于您的数据。如果您的文件很小并且大部分时间都是通过计算占用的,那么并行处理可以让您获得更大的加速。但是,如果您的文件很大,那么您可能会遇到I / O瓶颈,特别是如果所有文件都在同一个硬盘上。