在R中把循环写成并行运算

Python015

在R中把循环写成并行运算,第1张

这个不难,给你提供一份代码,欢迎追问。

------------------------

library(parallel)

library(iterators)

library(foreach)

library(doParallel)

cores=detectCores()

cl <- makeCluster(cores[1]-1)

registerDoParallel(cl)

a=rep(100, NA)

rate=rep(100, NA)

foreach(i = 1:100)%dopar%{

rate[i] = i / 100

b=runif(100, 0,1)

c=runif(100, 0,1)

a[i]=mean(b^2+c^2<rate[i])

}

plot(rate, a)

#stop cluster

stopCluster(cl)

这个可能比较麻烦,需要对R程序的底层API和package都要进行重构以适应分布式运算和分布式文件存储,现在好像没有什么好办法,因为现在很多包如果放到分布式上面可能都不能运行。有程序方面的原因,也有可能很多统计算法并不适合分布式计算

简单说就是R语言和Spark的一个接口,可以通过R语言调用Spark的计算能力,把计算任务分配到Spark的节点上来做。

亮点:

1、近乎完整的dplyr语法!用过dplyr的同学一定知道这套语法是多么的人性化…

2、可以直接调用Spark的机器学习能力!再也不用纠结pull到R里面的数据不够...

3、不要钱……

弱点:

1、如果不是Spark包自带的算法的话还是要自己Call Spark API写…要懂一点分布式开发

2、仔细一想这就是给Spark做了个壳...不能说是用R在做分布式运算orz

至于Microsoft...现在有Microsoft R Server, 提供了很多R原生函数的High Performance Analysis版本,可以实现并行运算...