Spark是处理大数据的利器,R是统计学的利器,SparkR的诞生可以让数据分析人员方便的处理海量数据成为可能。SparkR是一个R语言包,它提供了轻量级的方式使得可以在R语言中使用Apache Spark。在Spark 1.4中,SparkR实现了分布式的data frame,支持类似查询、过滤以及聚合的操作(类似于R中的data frames:dplyr),但是这个可以操作大规模的TB级别的数据集。本文首先介绍SparkR的安装,然后介绍SparkR的操作。
一. R和RStudio等安装
(1)安装R 3.X版本
采用编译源码的方式安装,R的版本为R-3.2.3.tar.gz。如下所示:
说明:prefix参数设置R将要安装的路径,enable-R-shlib可以保证lib目录下的动态库能够共享。
查看R相应版本,如下所示:
说明:通过命令sudo lsb_release -a查看系统当前的ubuntu版本号。
(3)安装SparkR
解析:
sudo R CMD javareconf
install.packages("rJava")
下载SparkR的源码:SparkR-pkg-master.zip(https://github.com/amplab-extras/SparkR-pkg)
编译SparkR源码:SPARK_HADOOP_VERSION=2.4.0 SPARK_VERSION=1.5.0 ./install-dev.sh
编译成功后,进入lib文件夹,打包SparkR为SparkR.tar.gz,然后R CMD INSTALL SparkR.tar.gz即可。
说明:rJava是R与Java交互通信的包,rJava,rhdfs,rmr2,rhbase,RHive以此类推。
(4)安装RStudio
说明:解压即可,配置环境变量后,直接输入rstudio启动。
二. RStudio和sparkR操作Spark集群
首先启动Hadoop和Spark集群,如下所示:
(1)RStdio操作Spark集群
library(SparkR) sc <- sparkR.init(master="spark://Master:7077","RWordCount") lines <- textFile(sc,"hdfs://Master:8020/input/hdfs-site.xml") words <- flatMap(lines, function(line){ strsplit(line," ")[[1]] }) wordCount <- lapply(words,function(word){list(word,1L) }) counts <- reduceByKey(wordCount, "+", 2L) output <- collect(counts) for(wordcount in output) { cat(wordcount[[1]],": ",wordcount[[2]],"\n") }
sparkR.stop()
解析:
(2)sparkR操作Spark集群
说明:启动bin/sparkR,在该shell下面即可使用R操作Hadoop和Spark集群。
SparkContext是SparkR的切入点,它使得你的R程序和Spark集群互通。你可以通过sparkR.init()来构建SparkContext,然后可以传入类似于应用程序名称的选项给它。如果想使用DataFrames,我们得创建SQLContext,这个可以通过SparkContext来构造。如果你使用SparkR shell,SQLContext 和SparkContext会自动地构建好。如果在RStudio中调用Spark集群,那么需要手工创建。其实,与Scala操作Spark集群完全类似。如下所示:
sc <- sparkR.init()
sqlContext <- sparkRSQL.init(sc)
下面举个例子,如下所示:
参考文献:
[1] ubuntu下安装R:http://blog.sina.com.cn/s/blog_6583048d01018ac5.html
[2] SparkR-pkg:https://github.com/amplab-extras/SparkR-pkg
[3] Spark以及SparkR的安装:http://www.bubuko.com/infodetail-619943.html
[4] SparkR的安装及使用:http://www.cnblogs.com/hseagle/p/3998853.html?utm_source=tuicool&utm_medium=referral
[5] 在Yarn上运行spark-shell和spark-sql命令行:http://lxw1234.com/archives/2015/08/448.htm
[6] How read json/csv file in SparkR?:http://stackoverflow.com/questions/32352439/how-read-json-csv-file-in-sparkr
[7] SparkR (R on Spark):http://spark.apache.org/docs/latest/sparkr.html
[8] Loading com.databricks.spark.csv via RStudio:http://stackoverflow.com/questions/30870379/loading-com-databricks-spark-csv-via-rstudio/30909511
[9] Cloudera Hadoop CDH上安装R及RHadoop(rhdfs/rmr2/rhbase/RHive):http://www.geedoo.info/installed-on-the-cloudera-hadoop-cdh-r-and-rhadoop-rhdfs-rmr2-rhbase-rhive.html
[10] R: rJava package install failing:http://stackoverflow.com/questions/3311940/r-rjava-package-install-failing
[11] 解惑rJava R与Java的高速通道:http://blog.fens.me/r-rjava-java/
[12] R语言为Hadoop注入统计血脉:http://www.csdn.net/article/2014-02-28/2818579-r-hadoop-intro
[13] RHadoop安装与使用:http://cos.name/2013/03/rhadoop2-rhadoop/
[14] RHadoop:http://wenku.baidu.com/link?url=HeLvvfXNu-OzjGguVmxATbA-vhzgiwIi59fa2lA8CUcvoDJrO7QxmSMvwvo9QruVviy5wupWFfY7HY7SCeLERShb6DMDbKLBht7azWQpXee
[15] SparkR的安装和实例:http://weibo.com/p/23041864a8c8930102vbk3
[16] Index of /cran/bin/linux/ubuntu/:http://mirror.bjtu.edu.cn/cran/bin/linux/ubuntu/
[17] Ubuntu下编译安装R全记录:http://www.linuxidc.com/Linux/2014-12/111040.htm
[18] rpy2安装使用中的问题:http://www.bubuko.com/infodetail-1006713.html
[19] SparkR安装部署及数据分析实例:http://www.cnblogs.com/payton/p/4227770.html