APP下载

浅析R语言并行计算在大数据分析中的应用

2016-02-09李加庆

电子测试 2016年23期
关键词:进程内存数据挖掘

李加庆,刘 燕

(中国电子科技集团公司第二十八研究所,空中交通管理系统与技术国家重点实验室,南京,210007)

浅析R语言并行计算在大数据分析中的应用

李加庆,刘 燕

(中国电子科技集团公司第二十八研究所,空中交通管理系统与技术国家重点实验室,南京,210007)

介绍了当今最流行的统计编程语言R语言,描述了R语言向量化计算思想以及其并行计算的软件包的使用过程,探讨了R语言在大数据分析中的应用。

R语言;并行计算;大数据;Hadoop

1 R语言简单介绍

R是一种用于统计分析计算及图形化展示的开源软件,同时也是一种编程语言,它广泛应用于商业、工业、政府部门、医药和科研等众多涉及数据分析的领域,随着近几年数据挖掘、大数据等概念不断发展,R作为数据分析的利器也越来越多地被人关注。

R使用方式类似于MATLAB和Python,通常运行于交互模式。在这种模式下,R执行单条命令并显示运行结果。启动R显示的是欢迎语和R提示符,就是最下方的>符号,显示内容如下:

R version 3.1.0 (2014-04-10) -- "Spring Dance"

Copyright (C) 2014 The R Foundation for Statistical Computing

Platform: i386-w64-mingw32/i386 (32-bit)

...

Type 'demo()' for some demos, 'help()' for on-line help, or

'help.start()' for an HTML browser interface to help.

Type 'q()' to quit R.

>

这时显示的窗口叫做R控制台,在R提示符后面输入命令按回车即可执行,如果有返回结果,将显示在命令行下方。

2 向量化计算

向量化计算是一种特殊的并行计算的方式,相比于一般程序在同一时间只执行一个操作的方式,它可以在同一时间执行多次操作,通常是对不同的数据执行同样的一个或一批指令,或者说把指令应用于一个数组/向量。

向量化计算广泛应用于R和Matlab这样的现代科学计算软件,Python的numpy软件包中也是以向量化计算为基础。在R语言的基本运算中,向量类型是R语言的核心,R语言代码或者R交互式会话中中几乎很少不涉及向量。R语言的向量化运算几乎可以和底层语言的速度一较高下,并且向量化是天然的并行化方式,如果条件允许,R的向量化编程可以很方便的转化为并行框架。

如果要对向量x中的每一个元素使用函数f()。在R中直接对x调用f()就能完成。这不仅简化代码,还能将代码运行效率显著提高到数百倍甚至更多。应用在向量上的函数实际上应用在其每一个元素上。下面的例子中,最左边的符号>是R提示符,符号<-是R中的赋值符号,c表示“连接”(英文concatenate的简写),c(3,1,5)表示把3、1、5三个一元向量连接起来成为一个向量。因为在R中任何数字都是一元向量。

> u <- c(3,1,5)

> v <- c(2,3,7)

> u > v

[1] TRUE FALSE FALSE

最后一行显示的是u>v命令的结果,可以看出在这里>函数分别运用在u[1]和v[1],得到结构TRUE,然后是u[2]和v[2],得到结果FALSE,以此类推。这里要说明的是,不同于C和Python等语言,R中向量索引从1开始。

利用向量化计算的思想,可以将一些复杂计算简单化。R中比较常用的函数lapply(X,FUN,…)返回一个与X同样长度的列表,其中每一个元素都是对X每一个元素调用FUN的结果。lapply函数运用了向量化计算的思想,。lapply是隐式循环函数,虽然其本身其实并不是向量化函数,但该函数对R语言的并行计算起着很大的作用,或者说R的并行计算很多是lapply函数的多种并行化运用。

3 并行计算

R语言的很多强大功能都是由很多优秀的软件包实现的,关于并行计算有许多软件包。从版本2.14.0开始,R就内置了parallel包,强化了R的并行计算能力。parallel包整合了早期比较成熟的snow包(snow是Simple Network ofWorkstations的简称),以及后期针对Linux系统和Mac OS X系统上应用的multicore包。parallel包可以很容易的在计算集群上实施并行计算,在多个CPU核心的单机上,也能发挥并行计算的功能。

parallel包的思路和lapply函数很相似,都是将输入数据分割、计算、整合结果。只不过并行计算是用到了不同的cpu来运算。这样的计算模型可以使用如下方式来表述:

a、启动M个“工人”进程(worker),并对每个工人进程初始化;

b、向每个工人进程分发任务所需数据;

c、将任务粗略的分为M个大小相等的任务块(chunks),并将这些任务块发送到工人进程(包含需要的R代码);

d、等待所有的工人进程完成计算任务,获取所有计算结果;

e、对于其他任务重复b-d;

f、关闭所有工人进程。

在parallel包里,对应上述计算模型由核心函数mclapply和parLapply实现,这两个函数都是对lapply函数的并行化应用。下面举例说明并行化函数的优势。

例子1,直接使用lapply函数对500万个元素的向量进行处理,由于数据集比较大,所以消耗时间比较长。

> fun <- function(x) (x)^2 + 1

> system.time(result <- lapply(1:5000000, fun))

user system elapsed 28.13 0.05 28.17

例子2,继续使用上面的函数fun,我们来使用parallel包提供处理速度,以parLapply函数在Windows计算机上运行为例,Linux系统中可以用mclapply函数得到类似结果。

> library(parallel)

> cl <- makeCluster(getOption("cl.cores",2)) #打开双核

> system.time(result <- parLapply(cl,1:5000000, fun)) user system elapsed 4.16 0.18 22.71 > stopCluster(cl)

在这里,makeCluster打开CPU核心的数量由系统核心数目决定,一般由detectCores函数确定系统核心数目,对于Window系统下的Intel处理器,一般使用detectCores(logical = F)来获得实际的物理核心数量。在并行处理数据时,上面的例子其实将具有500万个元素的数据集复制了2份,所以占用内存会比较大。

4 R与大数据分析

21世纪人类进入信息社会,传感器和社会网络产生海量数据,数据累积的量变引发质变,越来越多的企业、行业和国家以数据为资源进行知识和智力开发,挖掘了数据内在的阶值,逐步形成了大数据的概念。由于R语言并行计算存在令人诟病的“吃内存”弱点,所以很多观点认为R语言处理不了大数据。这里先不论大数据究竟是GB级还是TB或PB级的,甚至说处理不了的数据集才叫大,R语言在处理TB级以上的数据集的确不是强项,可以说效率很低。

R语言的优势在于其众多优秀的数据挖掘软件包,以及诸多非常强大的绘图软件包,如ggplot2之类,深得各行业数据分析人士的青睐。近些年数据挖掘和大数据等概念的流行,R作为数据分析工具正逐渐被重视。借助于越来越多并行计算及大数据处理相关的R程序包,R可以结合并行计算框架Hadoop来做大数据处理。R语言的模型算法优势加上Hadoop处理大数据的优势,这种结合正慢慢地成为数据挖掘技术的主流。下图简单地解释了R+Hadoop做数据分析时大数据流转的过程。

5 结语

R语言是主要用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、开源的软件,它是一个用于统计计算和统计制图的优秀工具。R语言以软件包的形式,实现各种统计、建模、分析功能。R语言也存在两个缺点:一是数据会被一次性读入内存进行处理,在函数调用会多次拷贝,消耗内存;二是单线程,除了个别的并行计算包,R的大多数包不会利用多个处理器提高计算速度。但是瑕不掩瑜,R语言正在各个行业数据分析领域发挥着它强大的分析能力。

[1] Norman Matloff. R语言编程艺术[M]. 机械工业出版社. 2013.

[2] Q.Ethan McCallum and Stephen Weston. Parallel R[M]. O’Reilly. 2012.

[3] R-core. Package ‘parallel’[M]. 2013.

[4] 张维明,唐九阳.大数据思维[J].指挥信息系统与技术,2015.6(2):1-4

李加庆(1985.01-),男,工程师,主要从事雷达情报处理和飞行安全告警研究

刘燕(1980.11-),女,高级工程师,主要从事雷达情报处理和情报模拟仿真研究

The Application of Language R Parallel Computing in Big Data Analysis

Li Jiaqing,Liu Yan
(The 28th Research Institute of China Electronic Technology Group Corporation,State Key Laboratory of Air Traffic Management System and Technology,NanJing,210007)

This paper introduces the most popular statistical programming language R,describes the use of language R vector computing and its parallel computing software package,and discusses the application of language R in big data analysis.

Language R;parallel computing;big data;Hadoop

猜你喜欢

进程内存数据挖掘
探讨人工智能与数据挖掘发展趋势
数据挖掘技术在打击倒卖OBU逃费中的应用浅析
债券市场对外开放的进程与展望
笔记本内存已经在涨价了,但幅度不大,升级扩容无须等待
“春夏秋冬”的内存
改革开放进程中的国际收支统计
一种基于Hadoop的大数据挖掘云服务及应用
内存搭配DDR4、DDR3L还是DDR3?
社会进程中的新闻学探寻
高级数据挖掘与应用国际学术会议