专栏首页Hadoop实操什么是sparklyr

什么是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实操

本文分享自微信公众号 - Hadoop实操(gh_c4c535955d0f),作者:Fayson

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-10-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何在CDH中启用Spark Thrift

    CDH 自带的Spark 不支持Spark Thrift,因为spark-assembly jar中缺少Hive thrift相关的依赖包,导致CDH用户没法使...

    Fayson
  • 0639-6.1.1-Spark读取由Impala创建的Parquet文件异常分析

    2.通过CDH提供的parquet tool进行分析,参考《0631-6.2-如何确认一个Parquet文件是否被压缩》。

    Fayson
  • 如何指定Spark1作业中Driver和Executor使用指定范围内端口

    在CDH集群中提交Spark作业,大家也都知道Spark的Driver和Executor之间通讯端口是随机的,Spark会随选择1024和65535(含)之间的...

    Fayson
  • Jenkins agent Docker 镜像重新命名了,你知道吗?

    我们正式宣布 Jenkins agent 官方 Docker 镜像重命名了。这对 Jenkins 用户不会产生任何直接影响,但是希望各位逐渐升级其实例。本文提供...

    LinuxSuRen
  • spark streaming知识总结[优化]

    问题导读 1.DStreams的含义是什么? 2.DStreams提供哪两种类型的操作? 3.Transformations操作分为哪两种类型? 4.本文说...

    用户1410343
  • 在win10的WSL中设置前端开发环境

    经过不断的迭代,Win10 下已经发布多时的 Linux 子系统(WSL - Windows Subsystem for Linux)现在已经比较成熟了;WSL...

    江米小枣
  • Python基于traceback模块获取异常信息

    除了使用 sys.exc_info() 方法获取更多的异常信息之外,还可以使用 traceback 模块,该模块可以用来查看异常的传播轨迹,追踪异常触发的源头。

    砸漏
  • 光纤熔接

    在实际工程应用中,常常需要将两根光纤连接到一起,从而使得光可以以较低的损耗经过。常用的光纤连接方法有两种,一种方法为机械连接 (mechanical splic...

    光学小豆芽
  • 基于vue(element ui) + ssm + shiro 的权限框架

    现在的Java世界,各种资源很丰富,不得不说,从分布式,服务化,orm,再到前端控制,权限等等玲琅满目,网上有句话说,语言框架迭代太快了,我学不动了,不如回去搬...

    用户1306381
  • Ubuntu 常用软件安装

    a)  sudo vi  /etc/apt/sources.list.d/google.list

    阳光岛主

扫码关注云+社区

领取腾讯云代金券