加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

基于snow包的并行之数据的分块

(2014-01-10 11:35:00)
标签:

snow

并行

分类: R

    2013年10月份开始接触,多半个月的时间基本上都在熟悉Linux的文件操作和R软件的snow包,总算将自己的代码并行化。兴奋之余,感觉有必要将摸索过程中的教训和心得记一下,等将来看自己当时作为初学者是多么矬,也希望能给志同道合者些许帮助。

    要说过去一年里最热的网络词汇,恐怕非“大数据”莫数了。数据经过时间的积累,终有一天分析者忍受不了程序运行的时间开销。算法改进不是人人都可为,退而求其次,“强暴”机器同样能够达到缩短时间成本的目的。办公室的电脑多有空闲,在可并行之前,自己常常在N台PC上打开2N个或者3N个R的进程,一天下来,筋疲力竭;每思及此,内流满面。现在好了,妈妈再也不用担心我的学习,so easy~

    闲话少叙,开始正题:

    首先当然要求PC和高性能均已安装R、snow包。

    其次,关于程序编写。这里要注意的是程序的分割。在实现某个分析目标的时候,尽可能将过程和算法分割为细致的、具体的function。func代表了每个阶段能够解决的问题,这样在并行代码中传入函数的时候比较容易实现。基于snow的并行function相当于apply函数的扩展。如下:

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

http://s12/mw690/002E7n7Wgy6FG1cLXHZbb&690

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

    其中,cl参数是计算集群,通过makeCluster()定义;x为需要并行的数据集合。直接传入待分析的数据集往往不易实现,我常采用的方法是将待分析的数据做索引,作为x传入。这样在编写传入parRapply()的fun时,定义其参数为待分析的数据索引即可,屡试不爽。并行计算中,需要进行计算中用到的数据集和函数在计算集群中的广播,clusterExport(["FUN"|"DATA"])实现。

    最后是程序的提交。qsub作业提交系统很好用,程序调试完毕后,只要qsub PBS文件,即将并行作业提交到机器队列中,等待着系统分配计算资源。

    DONE,并行愉快:-)

   

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有