54.认识sparklyr

  • sparklyr不仅提供了基于Spark的分布式机器学习算法库,还有其他的一些功能。如下:
    • 使用dplry和SQL(通过DBI)交互式的操作Spark的数据。
    • 过滤和聚合Spark数据集,然后将它们通过R进行分析和可视化。
    • 使用Spark MLlib和H2O SparkingWater实现分布式的机器学习。
    • 创建extensions,可以调用完整的SparkAPI并提供Spark包的接口。
    • 支持集成连接到Spark,并通过RStudioIDE浏览Spark DataFrames。

从CRAN安装sparklyr

install.packages("sparklyr")
  • 还要安装一个本地的Spark版本
    • 如果使用RStudio IDE,还需要下载一个最新的IDE,这个新的IDE包含了集成Spark的功能提升。
library(sparklyr)
spark_install(version = "1.6.2")

连接到Spark

  • 可以选择连接本地的Spark实例或者远程的Spark集群,如下连接到本地的Spark。
    • 返回的Spark connection(sc)为Spark集群提供了一个远程的dplyr数据源。
library(sparklyr) 
sc <- spark_connect(master = "local")

数据读取

  • 可以使用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)
  • 比如,分析航班延误的数据。
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)

Machine Learning

  • 使用Spark MLlib或H2O SparkingWater实现分布式的机器学习。
    • 它们都提供了一系列的基于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管道链接起来很容易。

H2O Sparkling Water

  • 以mtcars为例,这次使用H2O Sparkling Water来实现。
    • 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)的额外信息。

大数据视频推荐:
腾讯课堂
CSDN
大数据语音推荐:
企业级大数据技术应用
大数据机器学习案例之推荐系统
自然语言处理
大数据基础
人工智能:深度学习入门到精通

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容