这本书的目的是帮助所有人通过R使用Apache Spark。第1章~第5章,简单地介绍了如何大规模执行数据科学和机器学习项目。第6~9章介绍了使用Spark进行集群计算中令人激动的基本概念。第10章~第13章涵盖一些高级主题,包括分布式R、Streaming和社区贡献等。
如果你和大多数R语言用户一样,那你肯定喜欢统计学,也能够深入理解统计学。但是随着组织内部不断收集大量数据,添加Apache Spark这类工具就变得理所当然。在本书中,数据科学家和使用大规模数据应用的专业人员会学到如何使用Spark和R解决大数据和大计算问题。
作者会展示如何将Spark和R结合起来进行大数据分析。本书涵盖相关的数据科学话题、聚类计算,以及高级用户会感兴趣的问题。
·在Apache Spark环境下,使用R来分析、探索、转换、可视化数据。
·构建统计模型来提取信息并预测输出,自动化生产级的工作流程。
·使用分布式计算技术在多台机器上进行分析和建模。
·轻松使用Spark处理多个数据源和格式的大规模数据。
·学习其他用于大规模图处理、地理空间分析和基因组学分析的建模框架。
·深入高级话题,包括定制转换、实时数据处理和创建定制化Spark扩展。
在信息呈指数级增长的世界中,Apache Spark等先进工具为我们解决今天面临的许多相关问题提供了支持。从在基于数据驱动的决策中寻找改进方法的公司,到解决医疗、金融、教育和能源问题的研究机构,Spark比以往任何时候都能更快、更可靠地分析更多信息。
人们编写了各种各样的书籍来学习Apache Spark。例如,Spark: The Definitive Guide是一本综合性的书籍,Learning Spark是一本介绍性的书籍,旨在帮助用户熟悉和运行Spark(两者都由O'Reilly出版)。然而,撰写本书时,既没有使用R语言学习Apache Spark的书籍,也没有专门为R用户或潜在的R用户设计的书籍。
有一些在线资源介绍了用R语言学习Apache Spark。最著名的是sparkrstudiocom网站和sparkapacheorg网站上的Spark文档。这两个网站都是很好的在线资源,但是,上面的内容并不适合初学者。它们都假设读者对Apache Spark、R和集群计算有一定的了解。
这本书的目的是帮助所有人通过R使用Apache Spark。另外,由于R编程语言的目的是简化数据分析,我们相信这本书也可以为学习用Spark解决数据分析问题提供一条快捷途径。第1章提供了一个概述,帮助快速理解这些概念,并介绍了在计算机上处理这些问题所需的工具。然后,我们会快速进入相关的数据科学主题、集群计算和高级主题,即使是最有经验的用户也会对这部分内容感兴趣。
因此,本书旨在成为一个对广大用户有用的资源,从渴望学习Apache Spark的初学者,到希望理解为什么和如何通过R使用Apache Spark的有经验的读者,都可以从书中获益。
本书的结构如下:
介绍
12Apache SparkRSparkR
分析
在第3章中,你将学习如何使用R在Apache Spark中分析、探索、转换和可视化数据。
建模
45
规模化
69Apache Spark
扩展
10
高级技术
1113R
15SparkSpark
69SparkSparkSpark67
1013Spark
代码生成的表格的格式如下:
# A tibble: 3 x 2
numbers text
1 1 one
2 2 two
3 3 three
第一行描述表的维度(行数和列数),第二行是列名,第三行是列类型。我们在本书中使用的tibble包还提供了各种细微的视觉改进。
大多数绘图都使用ggplot2包和附录中提供的自定义主题进行渲染。但是,由于本书不关注数据可视化,因此我们只提供基本的绘图代码,其可能与实际中应用的格式不匹配。如果你有兴趣学习R中更多关于可视化的知识,可以考虑专门的书籍,比如R Graphics Cookbook('Reilly出版社)。
致谢
感谢那些允许通过R使用Spark程序包的作者:Javier Luraschi、Kevin Kuo、Kevin Ushey和JJ Allaire(sparklyr);Romain fran鏾is和Hadley Wickham(dbplyr);Hadley Wickham和Edgar Ruiz(dpblyr);Kirill Mülller(DBI);以及Apache Spark项目本身的作者及其最初作者Matei Zaharia。
感谢为丰富Spark和R生态系统而发布扩展程序包的作者:Akhil Nair(crassy);Harry Zhu(geospark);Kevin Kuo(graphframes、mleap、sparktf和sparkxgb);Jakub Hava、Navdeep Gill、Erin LeDell和Michal Malohlava(rsparkling);Jan Wijffels(sparksas7bdat);Aki Ariga(sparkavro);Martin Studer(sparkbq);Matt Pollock(sparklyrnested);Nathan Eastwood(sparkts);Samuel Macêdo(variantspark)。
感谢我们出色的编辑Melissa Potter为我们提供指导、鼓励和无数小时的详细反馈,这些努力使这本书成为我们的著作中最好的一本。
感谢Bradley Boehmke、Bryan Adams、Bryan Jonas、Dusty Turner和Hossein Falaki,感谢你们的技术评论、付出的时间和坦率的反馈,并与我们分享专业知识。多亏了你们,许多读者才会有更愉快的阅读体验。
感谢RStudio、JJ Allaire和Tareef Kawaf对这项工作的支持,感谢R社区的持续支持和鼓励。
Max Kuhn,感谢你对第4章的宝贵反馈。在他的允许下,我们采用了他的精彩著作Feature Engineering and Selection: A Practical Approach for Predictive Models(CRC出版社)中的例子。
我们也感谢所有间接参与但没有在这里明确列出的人们。我们真正站在了巨人的肩膀上。
这本书在R语言中用Yihui Xie的bookdown、JJ Allaire和Yihui Xie的rmarkdown、Yihui Xie的knitr写成;用Hadley Wickham和Winston Chang的ggplot2完成可视化;用Daniel Kallin和Javier Luraschi的nomnoml绘制图表;用John MacFarlane的pandoc进行文档转换。
本书约定
本书使用下列排版风格:
斜体(Italic)
表示新的术语、URL、电子邮箱地址、文件名和文件扩展名。
等宽字体(Constant width)
表示程序清单以及段落中引用的程序元素,如变量或函数名、数据库、数据类型、环境变量、语句和关键字。
等宽粗体(Constant width bold)
表示应由用户输入的命令或其他文本。
等宽斜体(Constant width italic)
表示应该被用户提供的,或由上下文确定的值替换的文本。
用来表示注意事项或者建议。
用来表示一般的注释。
示例代码
可以从https://githubcom/r-spark/the-r-in-spark下载补充材料(示例代码、练习等)。
这里的代码是为了帮助你更好地理解本书的内容。通常,可以在程序或文档中使用本书中的代码,而不需要联系O扲eilly获得许可,除非需要大段地复制代码。例如,使用本书中所提供的几个代码片段来编写一个程序不需要得到我们的许可,但销售或发布O扲eilly的配套CD-ROM则需要O'Reilly出版社的许可。引用本书的示例代码来回答一个问题也不需要许可,将本书中的示例代码的很大一部分放到自己的产品文档中则需要获得许可。
非常欢迎读者使用本书中的代码,希望(但不强制)你注明出处。注明出处的形式包含标题、作者、出版社和ISBN,例如:
Mastering Spark with R,作者为Javier Luraschi、Kevin Kuo和Edgar Ruiz,由O扲eilly出版,书号为978-1-492-04637-0
如果读者觉得对示例代码的使用超出了上面所给出的许可范围,欢迎通过permission@oreillycom联系我们。
O'Reilly在线学习平台(O'Reilly Online Learning)
近40年来,O'Reilly Media致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。O'Reilly的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及O扲eilly和200多家其他出版商提供的大量文本和视频资源。有关的更多信息,请访问http://oreillycom。
如何联系我们
对于本书,如果有任何意见或疑问,请按照以下地址联系本书出版商。
美国:
O'Reilly Media,Inc
1005 Gravenstein Highway North
Sebastopol,CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
要询问技术问题或对本书提出建议,请发送电子邮件至bookquestions@oreillycom。
本书配套网站https://oreilly/SparkwithR上列出了勘误表、示例以及其他信息。
关于书籍、课程、会议和新闻的更多信息,请访问我们的网站http://wwworeillycom。
我们在Facebook上的地址:http://facebookcom/oreilly
我们在Twitter上的地址:http://twittercom/oreillymedia
我们在YouTube上的地址:http://wwwyoutubecom/oreillymedia
Javier Luraschi是大规模数据科学诸多库的发明者,包括sparklyr、r2d3、pins和cloudml。
Kevin Kuo构建了机器学习库,并领导了Kasa AI的开放保险研究。
Edgar Ruiz构建了企业级的数据解决方案工具,包括dbplot、tidypredict和modeldb。
序言1
前言3
第1章 引言9
11 概述10
12 Hadoop10
13 Spark12
14 R16
15 sparklyr19
16 小结20
第2章 开始21
21 概述21
22 预备操作22
221 安装sparklyr23
222 安装Spark23
23 连接24
24 使用Spark25
241 网络接口25
242 分析28
243 建模28
244 数据30
245 扩展30
246 分布式R31
247 流式数据31
248 日志32
25 断开连接33
26 使用RStudio33
27 资源35
28 小结36
第3章 分析37
31 概述37
32 数据导入40
33 数据整理41
331 内置函数42
332 相关性43
34 可视化45
341 使用ggplot246
342 使用dbplot47
35 建模49
36 沟通51
37 小结54
第4章 建模56
41 概述56
42 探索性数据分析58
43 特征工程65
44 监督式学习68
441 广义线性回归72
442 其他模型73
45 非监督式学习73
451 数据准备74
452 主题建模75
46 小结77
第5章 管道操作78
51 概述78
52 创建工作80
53 用例81
54 操作模式83
55 交互性84
56 部署86
561 批打分87
562 实时打分88
57 小结90
第6章 集群92
61 概述92
62 本地化94
621 管理器94
622 发行版98
63 云端100
631 亚马逊101
632 Databricks102
633 谷歌103
634 IBM105
635 微软106
636 Qubole107
64 Kubernetes107
65 工具108
651 RStudio108
652 Jupyter109
653 Livy110
66 小结111
第7章 连接112
71 概述112
711 边缘节点114
712 Spark主目录114
72 本地模式115
73 单机模式116
74 YARN116
741 YARN客户端117
742 YARN集群117
75 Livy118
76 Mesos120
77 Kubernetes121
78 云模式121
79 批量模式122
710 工具123
711 多次连接123
712 故障排除124
7121 记录日志124
7122 Spark Submit124
7123 Windows126
713 小结126
第8章 数据127
81 概述127
82 读取数据129
821 路径129
822 模式130
823 内存131
824 列132
83 写入数据133
84 复制数据134
85 文件格式135
851 CSV136
852 JSON137
853 Parquet138
854 其他139
86 文件系统140
87 存储系统140
871 Hive141
872 Cassandra142
873 JDBC142
88 小结143
第9章 调试144
91 概述144
911 计算图146
912 时间线148
92 配置148
921 连接设置150
922 提交设置151
923 运行时设置152
924 sparklyr设置153
93 分区156
931 隐式分区156
932 显式分区157
94 缓存158
941 检查点159
942 内存159
95 重洗160
96 序列化161
97 配置文件161
98 小结162
第10章 扩展163
101 概述163
102 H2O165
103 图模型169
104 XGBoost173
105 深度学习176
106 基因组学179
107 空间数据181
108 故障排除183
109 小结183
第11章 分布式R185
111 概述185
112 用例187
1121 定制解析器188
1122 分区建模189
1123 网格搜索191
1124 Web API192
1125 模拟193
113 分区194
114 分组195
115 列196
116 context参数197
117 函数198
118 程序包199
119 集群需求200
1191 安装R200
1192 Apache Arrow201
1110 故障排除203
11101 工作节点日志204
11102 解决超时205
11103 检查分区206
11104 调试工作节点206
1111 小结207
第12章 数据流208
121 概述208
122 转换211
1221 分析212
1222 建模213
1223 管道214
1224 分布式R215
123 Kafka216
124 Shiny218
125 小结220
第13章 社区贡献221
131 概述221
132 Spark API223
133 Spark扩展224
134 使用Scala代码226
135 小结228
附录A 补充参考代码229