作者:刘杰
R语言具有丰富的封装库分析数据的能力,不过对海量数据力不从心。使用RHadoop可以给R语言插上处理海量数据能力的翅膀。R语言接入Hadoop有RHipe,RHadoop,Streaming三种方式,本文介绍RHadoop方式。
RHadoop是RevolutionAnalytics的工程的项目,开源实现代码在GitHub社区可以找到,下载地址:https://github.com/RevolutionAnalytics/RHadoop/wiki/Downloads 。 RHadoop分成三个部分
rhbase 下载文件:rmr2_3.3.1.tar.gz rhbase_1.2.1.tar.gz rhdfs_1.0.8.tar.gz
依赖包括rjava,reshape2,Rcpp,iterators,itertools,digest,RJSONIO,functional
$export JAVA_HOME="YOUR JAVA HOME"
$R CMD javareconf
$R
>install.packages("rJava")
>install.packages("reshape2")
>install.packages("Rcpp")
>install.packages("iterators")
>install.packages("itertools")
>install.packages("digest")
>install.packages("RJSONIO")
>install.packages("functional")
$export HADOOP_CMD = ~/hadoop-2.6.0-cdh5.4.1/bin/hadoop
$export HADOOP_STREAMING = ~/hadoop-2.6.0-cdh5.4.1/share/hadoop/mapreduce1/contrib/streaming/hadoop-streaming-2.6.0-mr1-cdh5.4.1.jar
$R CMD INSTALL rhdfs_1.0.8.tar.gz
$R CMD INSTALL rmr2_3.3.1.tar.gz
$R
>library('rhdfs')
>library('rmr2')
>hdfs.init()
>small.ints=to.dfs(1:10)
>##定义1-10,作为map输入,每次生成1-10个0-1之间的数,保留最大和最小最为map的输出
>mapreduce(
>input=small.ints,
>map=function(k,v)
>{
>lapply(seq_along(v),function(r){
>##生成v个随机0-1的随机数,返回最大和最小值
>x<-runif(v[[r]])
>keyval(r,c(max(x),min(x)))
>})})
安装依赖包reshape2会碰到其依赖plyr在R 3.0.2不支持的问题: package ‘plyr’ is not available (for R version 3.0.2) 需要手动下载安装包安装: 从launchpad.net/ubuntu/vivid/+package/r-cran-plyr下载r-cran-plyr_1.8.1.orig.tar.gz
$R
>setwd("/path/where/I/downloaded/the/compressedfile")
>intall.packages("r-cran->plyr_1.8.1.orig.tar.gz",repos=NULL)