sparklyr包--实现R与Spark接口
1.sparklyr包简介
Rstudio公司发布的sparklyr包具有以下几个功能:
- 实现R与Spark的连接;
- sparklyr包提供了一个完整的dplyr后端,可筛选并聚合Spark数据集,接着在R中实现分析与可视化;
- 利用Spark的MLlib机器学习库在R中实现分布式机器学习算法;
- 可以创建一个扩展,用于调用Spark API,并为Spark的所有包集提供了一个接口。
2.RStudio Server安装sparklyr包
Linux版本:Ubuntu 16.04 LTS 64bit
R版本:R3.3.1 64bit
RStudio Server版本:rstudio-server-0.99.902 64bit
通过devtools包实现sparklyr包的安装:
install.packages("devtools")
devtools::install_github("rstudio/sparklyr")
注意:此处安装devtools时Ubuntu中可能会出现安装不上的错误:
看错误信息可以知道找不到openssl,需要安装libssl-dev(Ubuntu):
$ sudo apt-get install libssl-dev
然后安装sparklyr因为网速等的原因可能需要进行多次安装,多尝试几次就可以了。如果安装中断,很可能安装包被lock,可以使用下面的方案解决(以reader包为例):
install.packages(“readr”,dependencies=TRUE,INSTALL_opts = c(‘—no-lock’))
3.在本地安装Spark 1.6.1和Hadoop 2.6
library(sparklyr) spark_install(version = "1.6.1")
此处默认的是使用Spark 1.6.1和Hadoop 2.6
如果用的是RStudio IDE,还需下载最新的预览版IDE。它包含有实现与Spark交互的若干增强功能(详情参考RStudio IDE)。
https://www.rstudio.com/products/rstudio/download/preview/
http://spark.rstudio.com/index.html#rstudio-ide
4.部署Spark
4.1本地部署
安装好sparklyr包后,我们连接本地的Spark,也可以连接远程的Spark集群。这里,使用spark_connect函数来连接本地的Spark:
library(sparklyr) library(dplyr) sc <- spark_connect(master = "local")
返回的Spark连接(sc)为Spark集群提供了一个远程的dplyr数据源。
4.2集群部署
使用sparklyr连接远程Spark集群Cluster Deployment,需要直接将R session部署在集群节点中的一个machine或者靠近集群处(根据网络性能)。在此种情况下,R不是直接在集群上运行,所以,必须要保证集群中的每个machine都有一个spark version并且具有相同的配置。
在集群节点中的一个machine或者靠近集群处运行R最直截了当的方式可以通过远程SSH会话或Rstudio server。在集群节点中使用的spark version必须已经在节点中部署,并且spark的路径需要添加到环境变量SPARK_HOME中,因此,在尝试一个连接之前必须保证SPARK_HOME环境变量在server中正确定义。通常是在Renviron.site配置文件中完成的。示例:
SPARK_HOME=/opt/spark/spark--bin-hadoop2.
然后,通过spark_connect函数和主节点的地址连接,例如:
library(sparklyr) sc <- spark_connect(master = "spark://local:7077")
如果在EC2上使用Spark EC2部署脚本,可以从/root/spark-ec2/cluster-url读取master,例如:
library(sparklyr)
cluster_url <- system('cat /root/spark-ec2/cluster-url', intern=TRUE)
sc <- spark_connect(master = cluster_url)
连接工具
可以通过spark-web函数观看Spark web UI,通过spark_log函数观看Spark log(日志)
spark_web(sc) spark_log(sc)
使用spark_disconnect函数断开spark的连接:
spark_disconnect(sc)
5.配置configuration
本部分描述sparklyr包和潜在的spark集群的行为的配置的各个选项。同时介绍创建多个配置文件(比如开发、测试、生产)。
5.1配置文件Config Files
通过spark_connect函数的config参数可以指定Spark连接的配置。通过使用config=spark_config()创建默认的配置。下面的代码代表了默认的行为:
spark_connect(master = "local", config = spark_config())
通过config=spark_config()函数可以从本地当前工作目录(如果不是位于工作目在父目录录)的路径中读取配置文件config.yml中的数据。这个文件不是必需的,只是用来提供重写默认行为overriding default behavior。还可以指定另一个配置文件名称 和/或 位置。config.yml文件依次处理使用配置包(using the config package),配置包可以支持多命名配置文件。
5.2Package选项
有许多可用的选项配置sparklyr包的行为:
|
选项 |
描述 |
|
sparklyr.defaultPackages |
自动包括在会话中的Spark packages (defaults to com.databricks:spark-csv_2.11:1.3.0” and “com.amazonaws:aws-java-sdk-pom:1.10.34”) |
|
sparklyr.cores.local |
当在本地运行时使用的内核数量 (defaults to parallel::detectCores) |
|
sparklyr.shell.* |
传递给spark-shell的命令行参数 (see the Spark documentation for details on supported options) |
举个例子:下面的配置文件设置了本地内核数为4并分配给Spark驱动2G内存:
default: sparklyr.cores.local: sparklyr.shell.driver-memory: 4GB
注:多文件的default使用将在下面描述。
5.3Spark选项
可以使用config.yml指定任意的spark配置属性:
|
选项 |
描述 |
|
spark.* |
任意配置属性 (通过创建一个SparkConf包含指定的属性应用)。spark的配置文档可以查看可用的属性。http://spark.apache.org/docs/latest/configuration.html
|
|
spark.sql.* |
Spark SQL的任意配置属性 (applied using SET)。Spark SQL Programming Guide的配置文档可以查看可用的属性。http://spark.apache.org/docs/latest/sql-programming-guide.html
|
举个例子:下面的配置文件为spark设置了一个当前的工作目录,并指定当揉数据(joins or aggregations)时使用的分区数量为100。
default: spark.local.dir: /tmp/spark-scratch spark.sql.shuffle.partitions:
5.4多文件配置
config包允许为不同环境定义多命名配置文件(例如:default, test, production)。所有额环境默认继承default环境,并且可以相互继承。
举个例子:您可能想使用一个不同的数据集来开发和测试或可能希望使用只适用于生产集群上运行的自定义Spark配置属性。config.yml表示如下:
default: dataset: "observations-dev.parquet" sample-size: production: spark.memory.fraction: 0.9 spark.rdd.compress: true dataset: "observations.parquet" sample-size: null
还可以使用这个特点来为不同的环境指定不同的Spark master:
default: spark.master: "local" production: spark.master: "spark://local:7077"
使用上面的配置,可以在使用spark_connect()的时候彻底省略master参数:
sc <- spark_connect()
注意:当前活动配置通过R_CONFIG_ACTIVE环境变量的值决定,可以通过config package documentation详细的了解。https://github.com/rstudio/config
6.预览版RStudio Server
Rstudio server提供了一个基于web的IDE远程的R会话接口,使其spark集群可以供前端使用。本部分介绍一些对于RStudio Server非常有用的额外的配置选项。RStudio的最新预览版集成支持Spark和sparklyr包。包含以下工具https://www.rstudio.com/products/rstudio/download/preview/:
- 创建和管理Spark连接
- 浏览表格数据和Spark DataFrames的所有列
- 可以预览Spark DataFrames的前1000行
6.1连接选项
一旦成功安装完sparklyr包,我们可以在IDE中可以看到一个新的Spark窗口。该窗口包含一个New Connection对话框,用于连接本地或者远程的Spark。如下所示:
可以使用rstudio.spark.connections选项配置哪一个连接,默认的可能是local和cluster连接,可以选择其中之一作为提供的连接,或者使用一个特殊的Spark master URL。一些常用的连接组合的选择包括:
|
Value |
描述 |
|
c("local", "cluster") |
Default 提供了本地和cluster spark instance的连接 |
|
"local" |
提供了本地spark instance连接 |
|
"cluster" |
提供了cluster spark instance连接 |
|
"spark://local:7077" |
提供了特殊cluster的连接 |
|
c("spark://local:7077", "cluster") |
提供了特殊cluster和其他cluster的连接 |
这些选项应该在Rprofile.site中设置,例如:
options(rstudio.spark.connections = "spark://local:7077")
6.2Spark安装
如果是在本地模式(相对于集群模式),需要预装spark version(s)并共享给使用该服务器的所有使用者。你可以安装spark version(s)在一个共享的目录中(e.g. /opt/spark),然后标明它作为spark安装目录。
options(spark.install.dir = "/opt/spark")
7.Sparklyr包的使用
7.1连接spark
安装好sparklyr包之后,我们连接本地的Spark,也可以连接远程的Spark集群。这里,我们使用spark_connect函数来连接本地的Spark:
library(sparklyr) library(dplyr) sc <- spark_connect(master = "local")
返回的Spark连接(sc)为Spark集群提供了一个远程的dplyr数据源。
出现下面的问题:
要求在Ubuntu中安装Java:
方法一:
Windows中下载
从Windows中复制到Ubuntu中:
打开新的控制台,创建目标文件夹:
root@love:/home/wangchao# cd /usr/lib root@love:/usr/lib# sudo mkdir java
在原来的控制台中输入如下命令,安装JDK:
$ sudo tar zvxf jdk-7u67-linux-x64.gz -C /usr/lib/java # 该命令的意思是解压jdk-7u67-linux-x64.gz文件,并把它安装到/usr/lib/java目录下,也就是前面创建的文件夹。注意命令中的-C是大写的字母C。
打开系统配置文件.bashrc
$ sudo gedit .bashrc
在其末端添加下面的代码,注意不要修改其他任何代码,添加环境变量:
export JAVA_HOME=/usr/lib/java/jdk1..0_67
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=${JAVA_HOME}/lib:${JRE_HOME}/lib:
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH
测试是否安装成功:
解压后的文件:
方法二:
直接使用系统安装:
$ sudo apt--jdk $ sudo R CMD javareconf $ sudo R
以上安装Java后还是出现了相同的问题:
安装好后发现还是不行,找不到Java,这下可以确定不是jdk的问题了,应该是R不能找到jdk,于是想到了一个打通R和Java的通道包rJava包,下载和安装rJava包:
Install.packages(“rJava”)
这下解决了以上的问题。
7.2读取数据
使用copy_to函数可以实现将R中的数据框导入到Spark。下面我将R自带的iris数据集,nycflights13包的flights数据集,以及Lahman包的Batting数据集复制到Spark(请确保安装了这两个包)。
install.packages(“nycflights13”) install.packages(“Lahman”) iris_tbl <- copy_to(sc, iris) flights_tbl <- copy_to(sc, nycflights13::flights, "flights") batting_tbl <- copy_to(sc, Lahman::Batting, "batting")
此处由于在安装的时候出现了中断,导致依赖包readr包被锁(lock)如下所示:
当然,解决这个问题,就是删除已经安装好的了readr包然后重新在rstudio server中安装readr包,或者修改readr的访问权限:
install.packages(“readr”) or 使用root权限 cd <readr存在的文件夹> $ sudo chmod -R readr
使用dplyr的src_tbls函数可以列出所有可用的表(包括预先加载在集群内的表)。
src_tbls(sc) [] "batting" "flights" "iris"
7.3使用dplyr语法
利用dplyr语法来对集群内的所有表进行操作,下面是一个简单的数据筛选案例:
# 筛选出飞机晚点两分钟的航班信息 flights_tbl %>% filter(dep_delay == )
Source: query [?? x ]
Database: spark connection master=local app=sparklyr local=TRUE
year month day dep_time dep_delay arr_time arr_delay carrier tailnum flight origin dest
<int> <int> <int> <int> <dbl> <int> <dbl> <chr> <chr> <int> <chr> <chr>
UA N14228 EWR IAH
AA N619AA JFK MIA
B6 N779JB JFK LAX
UA N841UA EWR ORD
- UA N511UA LGA DEN
- B6 N568JB JFK MCO
- VX N641VA JFK LAS
UA N76508 LGA IAH
- B6 N529JB JFK MCO
- UA N402UA EWR FLL
.. ... ... ... ... ... ... ... ... ... ... ... ...
Variables not shown: air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>.
dplyr导论提供了许多dplyr包中函数的使用案例。以下案例演示的是航班延误信息的数据可视化:
dplyr导论https://cran.rstudio.com/web/packages/dplyr/vignettes/introduction.html
delay <- flights_tbl %>% group_by(tailnum) %>% summarise(count = n(), dist = mean(distance), delay = mean(arr_delay)) %>% filter(count > , dist < , !is.na(delay)) %>% collect # 绘图 library(ggplot2) ggplot(delay, aes(dist, delay)) + geom_point(aes(size = count), alpha = /) + geom_smooth() + scale_size_area(max_size = )
7.4窗口函数
支持dplyr的窗口函数。如下所示:
batting_tbl %>% select(playerID, yearID, teamID, G, AB:H) %>% arrange(playerID, yearID, teamID) %>% group_by(playerID) %>% filter(min_rank(desc(H)) <= & H > )
Source: query [?? x ]
Database: spark connection master=local app=sparklyr local=TRUE
Groups: playerID
playerID yearID teamID G AB R H
<chr> <int> <chr> <int> <int> <int> <int>
anderal01 PIT
anderal01 PIT
balesco01 WAS
balesco01 WAS
bandoch01 CLE
bandoch01 CLE
bedelho01 ML1
bedelho01 PHI
biittla01 CHN
biittla01 MON
.. ... ... ... ... ... ... ...
更多dplyr在Spark中的用法参考http://spark.rstudio.com/dplyr.html
7.5调用MLlib
利用sparklyr包中的MLlib函数可以实现在Spark集群中调用机器学习算法。 这里,我们使用ml_linear_regression函数来拟合一个线性回归模型。数据为内置的mtcars数据集,我们想看看能否通过汽车的重量(wt)和发动机的气缸数(cyl)来预测汽车的油耗(mpg)。我们假设mpg跟这两个变量之间的关系是线性的。
# 将mtcar数据集复制到spark
mtcars_tbl <- copy_to(sc, mtcars)
# 先对数据做变换,然后将数据集分割为训练集和测试集
partitions <- mtcars_tbl %>%
filter(hp >= ) %>%
mutate(cyl8 = cyl == ) %>%
sdf_partition(training = )
# 对训练数据集做模型拟合
fit <- partitions$training %>%
ml_linear_regression(response = "mpg", features = c("wt", "cyl"))
Call:
mpg ~ wt + cyl
Coefficients:
(Intercept) wt cyl
33.499452 -2.818463 -0.923187
对spark得到的线性回归模型,使用summary()函数可以查看模型的拟合效果以及每个预测指标的统计意义。
summary(fit)
Call: mpg ~ wt + cyl Residuals: Min 1Q Median 3Q Max -1.752 -1.134 -0.499 1.296 2.282 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 33.49945 3.62256 9.2475 0.0002485 *** wt -2.81846 0.96619 -2.9171 0.0331257 * cyl -0.92319 0.54639 -1.6896 0.1518998 --- Signif. codes: R-Squared: 0.8274 Root Mean Squared Error: 1.422
参考:
Spark机器学习提供常用机器学习算法的实现和特征变换。更多信息请参考:
http://spark.rstudio.com/mllib.html
sparklyr包中的函数参考文档:
http://spark.rstudio.com/reference/sparklyr/latest/index.html
创建sparklyr扩展:
http://spark.rstudio.com/extensions.html
官方网站:
http://spark.rstudio.com/index.html
转载请注明地址:
http://www.cnblogs.com/homewch/p/5658970.html
sparklyr包--实现R与Spark接口的更多相关文章
- sparklyr包:实现Spark与R的接口
日前,Rstudio公司发布了sparklyr包.该包具有以下几个功能: 实现R与Spark的连接—sparklyr包提供了一个完整的dplyr后端 筛选并聚合Spark数据集,接着在R中实现分析与可 ...
- sparklyr包:实现Spark与R的接口+sparklyr 0.5
本文转载于雪晴数据网 相关内容: sparklyr包:实现Spark与R的接口,会用dplyr就能玩Spark Sparklyr与Docker的推荐系统实战 R语言︱H2o深度学习的一些R语言实践-- ...
- Apache Spark 2.2.0 中文文档 - SparkR (R on Spark) | ApacheCN
SparkR (R on Spark) 概述 SparkDataFrame 启动: SparkSession 从 RStudio 来启动 创建 SparkDataFrames 从本地的 data fr ...
- SparkR(R on Spark)编程指南 含 dataframe操作 2.0
SparkR(R on Spark)编程指南 Spark 2015-06-09 28155 1评论 下载为PDF 为什么不允许复制 关注iteblog_hadoop公众号,并在这里评论区留言 ...
- SparkR(R on Spark)编程指南 含 dataframe操作
SparkR(R on Spark)编程指南 Spark 2015-06-09 28155 1评论 下载为PDF 为什么不允许复制 关注iteblog_hadoop公众号,并在这里评论区留言 ...
- R语言数据接口
R语言数据接口 R语言处理的数据一般从外部导入,因此需要数据接口来读取各种格式化的数据 CSV # 获得data是一个数据帧 data = read.csv("input.csv" ...
- rugarch包与R语言中的garch族模型
来源:http://www.dataguru.cn/article-794-1.html rugarch包是R中用来拟合和检验garch模型的一个包.该包最早在http://rgarch.r-forg ...
- Java语言基本语法(一)————关键字&标识符(Java语言标识符命名规范&Java语言的包名、类名、接口名、变量名、函数名、常量名命名规则 )
一.关键字 关键字的定义和特点 定义:被Java语言赋予特殊含义,用做专门用途的字符串(单词). 特点:关键字中所有字母均为小写 下面列举一些常用的关键字. 用于定义数据类型的关键字:byte.sho ...
- jmeter配置脚本录制进行抓包并快速分析、定位接口问题
对于测试人员.开发人员来说,善用抓包工具确实是快速分析和定位问题的一大必备神技,现将配置过程记录如下: 1.打开jmeter后,首先添加一个线程组: 2.线程组可以重新命名按项目名称分类 3.然后在工 ...
随机推荐
- 在VC中创建并调用DLL
转自:http://express.ruanko.com/ruanko-express_45/technologyexchange6.html 一.DLL简介 1.什么是DLL? 动态链接库英文为DL ...
- python基础——使用@property
python基础——使用@property 在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9 ...
- 清除Windows系统桌面快捷方式小箭头
清除Windows桌面快捷方式小箭头,需要重启,且不会导致软件无法锁定到任务栏.新建.reg的注册表文件,命名随意,内容如下: Windows Registry Editor Version 5.00 ...
- 八皇后(dfs+回溯)
重看了一下刘汝佳的白板书,上次写八皇后时并不是很懂,再写一次: 方法1:逐行放置皇后,然后递归: 代码: #include <bits/stdc++.h> #define MAXN 8 # ...
- Android之WebView学习
WebView常用方法 WebSettings 在使用WebView前我们都要进行相关的配置,常见的操作如下: WebSettings settings = mWebView.getSettings( ...
- Hadoop 苦旅(1)——准备以及Cygwin安装
安装篇: 安装是最基本的,也是最难的.俗话说的好,万事开头难啊!的确如此.刚开始,自己折腾,总会是这样那样的问题,也许一个小的问题,就要推倒了重来.我现在就将这几天(2014-2-16~2014-2- ...
- [Nodejs]十分钟快速编写简单静态文件服务器
学了几天Nodejs 后我又干上了前端的活.这次遇到的问题是,我想在不同的设备上方便的查看我编写的网页,很自然的就想到要是能在本地搭建一个简单的http服务器的话,那局域网内的所有设备都可以访问了,这 ...
- 使用pl/sql監控PROCEDURE執行時間
創建表 CREATE TABLE PROCESS_TIMING_LOG ( PROCESS_NAME VARCHAR2(50 BYTE), EXECUTION_DATE D ...
- 用Node.js开发Windows 10物联网应用
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 未来10年内,物联网将会如移动互联网这样深入到我们生活的各方各面.所以微软现在对物联网进行了 ...
- WPF初学(一)——布局【良好界面的基础】
由Winform转到WPF的一部分人,很可能忽略掉布局,习惯性的使用固定定位.然而,没有良好的布局,后面界面控件画的再好看,花哨,都不过是鲜花插在牛粪上,很可能始终都是一坨??(呵呵). 闲话少说,首 ...