sparklyr包:实现Spark与R的接口
日前,Rstudio公司发布了sparklyr包。该包具有以下几个功能:
- 实现R与Spark的连接—
sparklyr包提供了一个完整的dplyr后端 - 筛选并聚合Spark数据集,接着在R中实现分析与可视化
- 利用Spark的MLlib机器学习库在R中实现分布式机器学习算法
- 可以创建一个扩展,用于调用Spark API。并为Spark的所有包集提供了一个接口
- 未来在RStudio IDE中集成支持Spark和sparklyr包
安装
通过devtools包实现sparklyr包的安装:
install.packages("devtools")
devtools::install_github("rstudio/sparklyr")
接着,我们需要在本地安装Spark:
library(sparklyr)
spark_install(version = "1.6.1")
如果用的是RStudio IDE,还需下载最新的预览版IDE。它包含有实现与Spark交互的若干增强功能(详情参考RStudio IDE)。
连接Spark
安装好sparklyr包之后,我们连接本地的Spark,也可以连接远程的Spark集群。这里,我们使用spark_connect函数来连接本地的Spark:
library(sparklyr)
library(dplyr)
sc <- spark_connect(master = "local")
返回的Spark连接(sc)为Spark集群提供了一个远程的dplyr数据源。更多连接远程Spark集群的信息参考这里
读取数据
使用copy_to函数可以实现将R中的数据框导入到Spark。下面我将R自带的iris数据集,nycflights13包的flights数据集,以及Lahman包的Batting数据集复制到Spark(请确保安装了这两个包)。
iris_tbl <- copy_to(sc, iris)
flights_tbl <- copy_to(sc, nycflights13::flights, "flights")
batting_tbl <- copy_to(sc, Lahman::Batting, "batting")
使用dplyr的src_tbls函数可以列出所有可用的表(包括预先加载在集群内的表)。
src_tbls(sc)
[1] "batting" "flights" "iris"
使用dplyr语法
我们利用dplyr语法来对集群内的所有表进行操作,下面是一个简单的数据筛选案例:
# 筛选出飞机晚点两分钟的航班信息
flights_tbl %>% filter(dep_delay == 2)
Source: query [?? x 16]
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>
1 2013 1 1 517 2 830 11 UA N14228 1545 EWR IAH
2 2013 1 1 542 2 923 33 AA N619AA 1141 JFK MIA
3 2013 1 1 702 2 1058 44 B6 N779JB 671 JFK LAX
4 2013 1 1 715 2 911 21 UA N841UA 544 EWR ORD
5 2013 1 1 752 2 1025 -4 UA N511UA 477 LGA DEN
6 2013 1 1 917 2 1206 -5 B6 N568JB 41 JFK MCO
7 2013 1 1 932 2 1219 -6 VX N641VA 251 JFK LAS
8 2013 1 1 1028 2 1350 11 UA N76508 1004 LGA IAH
9 2013 1 1 1042 2 1325 -1 B6 N529JB 31 JFK MCO
10 2013 1 1 1231 2 1523 -6 UA N402UA 428 EWR FLL
.. ... ... ... ... ... ... ... ... ... ... ... ...
Variables not shown: air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>.
dplyr导论提供了许多dplyr包中函数的使用案例。以下案例演示的是航班延误信息的数据可视化:
delay <- flights_tbl %>%
group_by(tailnum) %>%
summarise(count = n(), dist = mean(distance), delay = mean(arr_delay)) %>%
filter(count > 20, dist < 2000, !is.na(delay)) %>%
collect
# 绘图
library(ggplot2)
ggplot(delay, aes(dist, delay)) +
geom_point(aes(size = count), alpha = 1/2) +
geom_smooth() +
scale_size_area(max_size = 2)
窗口函数
支持dplyr的窗口函数。如下所示:
batting_tbl %>%
select(playerID, yearID, teamID, G, AB:H) %>%
arrange(playerID, yearID, teamID) %>%
group_by(playerID) %>%
filter(min_rank(desc(H)) <= 2 & H > 0)
Source: query [?? x 7]
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>
1 anderal01 1941 PIT 70 223 32 48
2 anderal01 1942 PIT 54 166 24 45
3 balesco01 2008 WAS 15 15 1 3
4 balesco01 2009 WAS 7 8 0 1
5 bandoch01 1986 CLE 92 254 28 68
6 bandoch01 1984 CLE 75 220 38 64
7 bedelho01 1962 ML1 58 138 15 27
8 bedelho01 1968 PHI 9 7 0 1
9 biittla01 1977 CHN 138 493 74 147
10 biittla01 1975 MON 121 346 34 109
.. ... ... ... ... ... ... ...
更多dplyr在Spark中的用法参考这里。
调用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 >= 100) %>%
mutate(cyl8 = cyl == 8) %>%
sdf_partition(training = 0.5, test = 0.5, seed = 1099)
# 对训练数据集做模型拟合
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: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
R-Squared: 0.8274
Root Mean Squared Error: 1.422
Spark机器学习提供常用机器学习算法的实现和特征变换。更多信息请参考这里。
RStudio IDE
RStudio的最新预览版集成支持Spark和sparklyr包。包含以下工具:
- 创建和管理Spark连接
- 浏览表格数据和Spark DataFrames的所有列
- 可以预览Spark DataFrames的前1000行
一旦成功安装完sparklyr包,我们可以在IDE中可以看到一个新的Spark窗口。该窗口包含一个New Connection对话框,用于连接本地或者远程的Spark。如下所示:



Sparklyr包的官方网站提供了详尽的学习文档,感兴趣的读者可以自行了解:
本文由雪晴数据网负责翻译整理,原文参考sparklyr — R interface for Apache Spark。转载本译文请注明链接http://www.xueqing.tv/cms/article/232
sparklyr包:实现Spark与R的接口的更多相关文章
- sparklyr包:实现Spark与R的接口+sparklyr 0.5
本文转载于雪晴数据网 相关内容: sparklyr包:实现Spark与R的接口,会用dplyr就能玩Spark Sparklyr与Docker的推荐系统实战 R语言︱H2o深度学习的一些R语言实践-- ...
- sparklyr包--实现R与Spark接口
1.sparklyr包简介 Rstudio公司发布的sparklyr包具有以下几个功能: 实现R与Spark的连接: sparklyr包提供了一个完整的dplyr后端,可筛选并聚合Spark数据集,接 ...
- 获取指定包名下继承或者实现某接口的所有类(扫描文件目录和所有jar)
import java.io.File; import java.io.FileFilter; import java.io.IOException; import java.net.JarURLCo ...
- 使用抓包工具将抓到的接口存放Jmeter中
1. jmeter工作台新增 HTTP代理服务器.端口设置为:8888 2. 抓包工具上面设置代理服务器地址 3.代理服务器未启动时,抓包工具界面显示无法联网. 4.在Jmeter中点击[启动]HTT ...
- R用户的福音︱TensorFlow:TensorFlow的R接口
------------------------------------------------------------ Matt︱R语言调用深度学习架构系列引文 R语言︱H2o深度学习的一些R语言实 ...
- R︱并行计算以及提高运算效率的方式(parallel包、clusterExport函数、SupR包简介)
要学的东西太多,无笔记不能学~~ 欢迎关注公众号,一起分享学习笔记,记录每一颗"贝壳"~ --------------------------- 终于开始攻克并行这一块了,有点小兴 ...
- R语言︱H2o深度学习的一些R语言实践——H2o包
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- R语言H2o包的几个应用案例 笔者寄语:受启发 ...
- Sparklyr与Docker的推荐系统实战
作者:Harry Zhu 链接:https://zhuanlan.zhihu.com/p/21574497 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 相关内容: ...
- mxnet:结合R与GPU加速深度学习
转载于统计之都,http://cos.name/tag/dmlc/,作者陈天奇 ------------------------------------------------------------ ...
随机推荐
- Apache Beam 剖析
1.概述 在大数据的浪潮之下,技术的更新迭代十分频繁.受技术开源的影响,大数据开发者提供了十分丰富的工具.但也因为如此,增加了开发者选择合适工具的难度.在大数据处理一些问题的时候,往往使用的技术是多样 ...
- java 基础知识十 继承和多态
java 基础知识十 继承和多态 继承 1.定义: 继承是指声明一些类,可以再进一步声明这些类的子类,而子类具有父类已经拥有的一些方法和属性,这跟现实中的父子关系是十分相似的,所以面向对象把这种 ...
- android中全局异常捕捉
android中全局异常捕捉 只要写代码就会有bug,但是我们要想办法收集到客户的bug.有第三方bugly或者友盟等可以收集.但是,android原生就提供了有关收集异常的api,所以我们来学习一下 ...
- MySQL最常用数值函数
数值函数: 用来处理很多数值方面的运算,使用数值函数,可以免去很多繁杂的判断求值的过程,能够大大提高用户的工作效率. 1.ABS(x):返回 x 的绝对值 mysql> select abs(- ...
- FreeSWITCH 安装配置的 各种坑, 填坑
个人安装环境: OS:CentOS6.7 64位 FreeSWITCH Ver:1.6.17 一. 编译出错 安装 之前, 最好 先安装 这几个东西(如果有, 请忽略): yasm (有nasm的话 ...
- jquery使用CSS3实现文字动画效果插件Textillate.js
Textillate是一款基于jquery的使用CSS3实现文字动画的小巧插件.Textillate.js集成了一些很棒的使用CSS3动画效果的 JavaScript 库,您可非常轻轻松地把这些动画效 ...
- bzoj1898 [Zjoi2005]沼泽鳄鱼
Description 潘塔纳尔沼泽地号称世界上最大的一块湿地,它地位于巴西中部马托格罗索州的南部地区.每当雨季来临,这里碧波荡漾.生机盎然,引来不少游客.为了让游玩更有情趣,人们在池塘的中央建设了几 ...
- poj3264线段数求最大最小值
链接:https://vjudge.net/contest/66989#problem/G 完完全全的水题,还是被坑了,一个return忘了写,de了半天bug!! #include<iostr ...
- linux 内核的futex pi-support,即pi-futex使用rt_mutex委托
futex的pi-support,也就是为futex添加pi算法解决优先级逆转的能力,使用pi-support的futex又称为pi-futex.在linux内核的同步机制中,有一个pi算法的成例,就 ...
- Scraping_regex
上面链接爬虫只是能将我们所需的网页下载下来,但是,我们没办法得到我们想要的数据.因此,我们只有URL管理器和URL下载器是不足以组成一个完整的网络爬虫的.我们还需要URL解析器,对数据进行提取. 数据 ...
