什么是sparklyr

时间:2022-05-06
本文章向大家介绍什么是sparklyr,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

我们(RStudio Team)今天很高兴的宣布一个新的项目sparklyr(https://spark.rstudio.com),它是一个包,用来实现通过R连接Apache Spark。

在过去的几年里,我们总是在听说大家需要一个连接Spark的源生的dplyr(https://github.com/tidyverse/dplyr)接口,于是我们开发创建了一个!sparklyr不仅提供了基于Spark的分布式机器学习算法库,还有其他的一些功能。如下:

我们同时也很高兴与行业内的几个合作伙伴一起来推动和完善这个项目。IBM正在将sparklyr集成到它的DataScience Experience,Cloudera与我们一起确保sparklyr能够满足企业客户的需求,以及H2O则提供了sparklyr和H2OSparkling Water的集成。

如何开始


从CRAN安装sparklyr

install.packages("sparklyr")

还要安装一个本地的Spark版本

library(sparklyr)
spark_install(version = "1.6.2")

如果你使用RStudio IDE,你还需要下载一个最新的IDE(https://www.rstudio.com/products/rstudio/download/preview/),这个新的IDE包含了集成Spark的功能提升。

更多的文档或者例子请参考:http://spark.rstudio.com

连接到Spark


你可以选择连接本地的Spark实例或者远程的Spark集群,如下我们连接到本地的Spark。

library(sparklyr) 
sc <- spark_connect(master = "local")

返回的Spark connection(sc)为Spark集群提供了一个远程的dplyr数据源。

读取数据


你可以使用dplyr的copy_to函数将R的data frames拷贝到Spark。(更典型的是你可以通过spark_read的一系列函数读取Spark集群中的数据。)如下例子,我们从R拷贝一些数据集到Spark。(注意你可能需要安装nycflights13和Lahman包才能运行这些代码。)

library(dplyr) 
iris_tbl <- copy_to(sc, iris) 
flights_tbl <- copy_to(sc, nycflights13::flights, "flights")
batting_tbl <- copy_to(sc, Lahman::Batting, "batting")

使用dplyr


针对集群中的表,我们现在可以使用所有可用的dplyr的verbs。以下是一个简单的过滤示例:

# filter by departure delay
flights_tbl %>% filter(dep_delay == 2)

https://cran.r-project.org/web/packages/dplyr/vignettes/dplyr.html,这里提供了更多的例子可以供你尝试。比如,我们还是继续上面的例子,分析航班延误的数据。

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()

# plot delays
library(ggplot2)
ggplot(delay, aes(dist, delay)) +
geom_point(aes(size = count), alpha = 1/2) +
geom_smooth() +
scale_size_area(max_size = 2)

注意尽管上面显示的dplyr函数与你在使用R的data frames时是一样的,但如果使用的是sparklyr,它们其实是被推到远端的Spark集群里执行的。

Window Functions


dplyr同时也支持window函数,比如:

library(dplyr)
iris_tbl <- copy_to(sc, iris)
flights_tbl <- copy_to(sc, nycflights13::flights, "flights")
batting_tbl <- copy_to(sc, Lahman::Batting, "batting")

batting_tbl %>% 
select(playerID, yearID, teamID, G, AB:H) %>%  
arrange(playerID, yearID, teamID) %>% 
group_by(playerID) %>%  
filter(min_rank(desc(H)) <= 2 & H > 0)

更多使用dplyr操作Spark的文档请参考:https://spark.rstudio.com/dplyr.html

Machine Learning


使用Spark MLlib(https://spark.rstudio.com/mllib.html)或H2O SparkingWater(https://spark.rstudio.com/h2o.html)实现分布式的机器学习。它们都提供了一系列的基于DataFrames构建的high-levelAPIs,从而帮助你创建和调试机器学习工作流。

Spark MLlib


在这个例子里,我们将使用ml_linear_regression来拟合线性回归模型。我们使用内置的mtcar数据集,看看是否可以根据其重量(wt)和发动机的气缸数量(cyl)来预测汽车的燃油消耗(mpg)。我们假设在每种情况下,mpg和features(wt和cyl)之间的关系是线性的。

# copy mtcars into spark
mtcars_tbl <- copy_to(sc, mtcars)

# transform our data set, and then partition into 'training', 'test'
partitions <- mtcars_tbl %>%
filter(hp >= 100) %>%
mutate(cyl8 = cyl == 8) %>%
sdf_partition(training = 0.5, test = 0.5, seed = 1099)

# fit a linear model to the training dataset
fit <- partitions$training %>%
ml_linear_regression(response = "mpg", features = c("wt", "cyl"))

对于由Spark生成的线性回归模型,我们可以使用summary()来更多的了解拟合质量(quality of our fit),以及每个预测变量的统计显著性(statistical significance)。

summary(fit)

Spark机器学习支持众多的算法和特征变换,如上所示,你会发现将这些功能与dplyr管道链接起来很容易。更多资料,请参考:https://spark.rstudio.com/mllib.html

H2O Sparkling Water


我们还是以mtcars为例,但这次我们使用H2O Sparkling Water(https://spark.rstudio.com/h2o.html)来实现。dplyr代码依旧是用来准备数据,当我们将数据分为test和training后,我们调用h2o.glm而不是ml_linear_regression。

# convert to h20_frame (uses the same underlying rdd)
training <- as_h2o_frame(partitions$training)
test <- as_h2o_frame(partitions$test)

# fit a linear model to the training dataset
fit <- h2o.glm(x = c("wt", "cyl"),
y = "mpg",
training_frame = training,
lamda_search = TRUE)

# inspect the model
print(fit)

对于由H2O产生的线性回归模型,我们可以使用print() 或 summary()来更多的了解拟合质量(quality of our fit)。 summary()方法返回一些关于评分历史(scoringhistory)和变量重要性(variableimportance)的额外信息。

了解更多信息,请访问:https://spark.rstudio.com/h2o.html

扩展


sparklyr的dplyr和机器学习的接口同样适用于扩展包。由于Spark是一个通用的分布式计算环境,因此有很多其他的扩展应用,比如自定义的机器学习管道的接口,第三方Spark包的接口等等。

sas7bdat(https://github.com/bnosac/spark.sas7bdat)扩展包可以并行的将SAS中的sas7bdat格式的数据集读入到Spark的DataFrames。 rsparkling(https://spark.rstudio.com/h2o.html)扩展包可以将sparklyr和H2O的 SparklingWater(https://www.h2o.ai/download-2/sparkling-water/)联系起来。

我们很高兴看到R社区创造了如此之多的sparklyr扩展包,更多资料请参考:https://spark.rstudio.com/extensions.html

RStudio IDE


最新的RStudio IDE集成了Spark和sparklyr,并包括以下工具:

  • 创建和管理Spark连接
  • 浏览Spark DataFrames的表和列
  • 预览Spark DataFrames的前1000行

一旦你安装了sparklyr的包,你就可以在IDE中发现“Spark”面板。这个面板包含了一个“新的连接”会话,用来连接本地或者远程的Spark。

一旦你连接到Spark,你就可以浏览Spark集群里的表

Spark的DataFrame的预览使用的是标准的RStudio data viewer

参考


http://blog.cloudera.com/blog/2016/09/introducing-sparklyr-an-r-interface-for-apache-spark/

https://blog.rstudio.com/2016/09/27/sparklyr-r-interface-for-apache-spark/?aliId=16814538

醉酒鞭名马,少年多浮夸! 岭南浣溪沙,呕吐酒肆下!挚友不肯放,数据玩的花! 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。


推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操