子雨大数据之Spark入门教程(Scala版)

大数据学习路线图

子雨大数据之Spark入门
扫一扫访问本博客
【版权声明】博客内容由厦门大学数据库实验室拥有版权,未经允许,请勿转载!版权所有,侵权必究!

Spark最初诞生于美国加州大学伯克利分校(UC Berkeley)的AMP实验室,是一个可应用于大规模数据处理的快速、通用引擎。2013年,Spark加入Apache孵化器项目后,开始获得迅猛的发展,如今已成为Apache软件基金会最重要的三大分布式计算系统开源项目之一(即Hadoop、Spark、Storm)。Spark最初的设计目标是使数据分析更快——不仅运行速度快,也要能快速、容易地编写程序。为了使程序运行更快,Spark提供了内存计算,减少了迭代计算时的IO开销;而为了使编写程序更为容易,Spark使用简练、优雅的Scala语言编写,基于Scala提供了交互式的编程体验。虽然,Hadoop已成为大数据的事实标准,但其MapReduce分布式计算模型仍存在诸多缺陷,而Spark不仅具备Hadoop MapReduce所具有的优点,且解决了Hadoop MapReduce的缺陷。Spark正以其结构一体化、功能多元化的优势逐渐成为当今大数据领域最热门的大数据计算平台。

Spark支持使用Scala、Java、Python和R语言进行编程。由于Spark采用Scala语言进行开发,因此,建议采用Scala语言进行Spark应用程序的编写。Scala是一门现代的多范式编程语言,平滑地集成了面向对象和函数式语言的特性,旨在以简练、优雅的方式来表达常用编程模式。Scala语言的名称来自于“可伸展的语言”,从写个小脚本到建立个大系统的编程任务均可胜任。Scala运行于Java平台(JVM,Java 虚拟机)上,并兼容现有的Java程序。

但是,Scala编程语言的学习曲线相对比较陡峭,尤其是,目前很多高校教学大多采用Java等面向对象语言,而Scala则融入了许多函数式编程思维,面向对象编程和函数式编程,是两种截然不同的编程风格,因此,给教师和学生学习Scala语言造成了很大的障碍。

笔者作为“中国高校大数据课程公共服务平台”的建设者和负责人,一直致力于为全国高校教师和学生快速学习大数据知识提供辅助,降低大数据知识学习门槛,大幅节约大数据学习时间,加快推动全国高校大数据课程的大规模普及。“中国高校大数据课程公共服务平台”(平台主页)目前已经成长为国内高校大数据教学知名品牌,年访问量超过100万次,为教师和学生提供了大数据教学资源一站式服务,包括课程教材、讲义PPT、学习指南、备课指南、授课视频、实验指南、技术资料和师资培训等。在2013年5月到2016年9月,平台重点建设了与《大数据技术原理与应用》(教材官网)入门级大数据教材配套的各种教学资源,为高校开设大数据导论课程奠定了较好的基础。

但是,《大数据技术原理与应用》课程只能作为导论级课程,高校课程体系还应该包括更多高级课程,比如机器学习、Spark、NoSQL、R语言、Hadoop高级编程、流数据处理、大数据应用与案例等。因此,从2016年9月开始,笔者开始带领厦门大学数据库实验室团队,建设“Spark入门教程”教学资源,作为大数据学习探路先锋,寻找出一条学习Spark技术的捷径,降低学习难度,节省学习时间,辅助高校教师顺利开设Spark课程。

开发Spark应用程序时,可以采用Scala、Python、Java和R等语言,首选语言是Scala,因为Spark这个软件本身就是使用Scala语言开发的,采用Scala语言编写Spark应用程序,可以获得最好的性能。关于采用哪种语言编写Spark应用程序,这里强调两点:(1)Java代码太繁琐。在大数据应用场景中,不太适合使用Java,因为,完成同样的任务,Scala只需要一行代码,而Java则可能需要10行代码;而且,Scala语言可以支持交互式编程,大大提高了程序开发效率,而Java则不支持交互式执行,必须编译以后运行。(2)Python语言并发性能不好。在并发性能方面,Scala要明显优于Python,而且,Scala是静态类型,可以在编译阶段就抛出错误,便于开发大型大数据项目,此外,Scala兼容Java,运行在JVM上,可以直接使用Java中的Hadoop API来和Hadoop进行交互,但是,Python与Hadoop之间的交互非常糟糕,通常都需要第三方库(比如hadoopy)。

本教程采用Scala语言编写Spark应用程序,在知识安排上,首先学习Scala编程,然后再学习Spark应用程序开发。如果想学习基于Python语言的Spark入门教程,请访问《子雨大数据之Spark入门教程(Python版)》。需要说明的是,学习过基于Scala语言的Spark程序开发方法以后,有了这个基础,很轻松就可以学会基于Python语言的Spark程序开发方法。

点击这里观看与本在线教程配套的林子雨老师讲课视频《Spark编程基础》
(文字教程和视频教程两者各有优点,互为补充,二者可以结合使用。有些内容只出现在文字教程中,视频中没有讲,有些内容则是只出现在视频中,文字教程没有讲)

[教程目录]

林子雨、赖永炫、陶继平 编著《Spark编程基础(Scala版)》纸质教材(访问教程官网)已经于2018年8月1日由人民邮电出版社出版发行,主要用于高校大数据课程教学,敬请关注!

第一部分:快学Scala

第一章 Scala简介
第二章 Scala安装
第三章 Scala基础
第1节 声明值和变量
第2节 基本数据类型和操作
第3节 Range
第4节 打印语句
第5节 读写文件
第四章 控制结构
第1节 if条件表达式
第2节 while循环
第3节 for循环
第五章 数据结构
第1节 数组
第2节 列表
第3节 元组
第4节 集
第5节 映射
第6节 迭代器
第六章 类
第七章 对象
第八章 继承
第九章 特质
第十章 模式匹配
第十一章 函数式编程
第1节 函数定义和高阶函数
第2节 针对集合的操作
第2.1节 遍历操作
第2.2节 map操作和flatMap操作
第2.3节 filter操作
第2.4节 reduce操作
第2.5节 fold操作
第3节 函数式编程实例WordCount

Spark有不同的版本,而且版本一直在升级,我们只要学习其中一个版本即可。截至2017年3月,Spark已经更新到2.0以上版本。
下面的第二部分是Spark速成(Spark2.1.0版本),第三部分是Spark速成(Spark1.6.2版本),读者可以选择其中一个版本学习,建议学习最新2.1.0版本。

第二部分:Spark速成(Spark2.1.0版本)

林子雨、赖永炫、陶继平 编著《Spark编程基础(Scala版)》纸质教材(访问教程官网)已经于2018年8月1日由人民邮电出版社出版发行,主要用于高校大数据课程教学,敬请关注!
如果遇到厦大校园网维护无法访问,在无法访问期间,可以访问百度云盘上的大数据教学应急盘
Spark官网截至2017年3月发布的最新版本是Spark2.1.0,建议读者学习Spark2.1.0版本。
第1章 Spark的设计与运行原理
1.1 Spark简介
1.2 Spark运行架构
1.3 RDD的设计与运行原理
1.4 Spark的部署模式
第2章 Spark的安装与使用
2.1 Spark的安装与使用
2.2 第一个Spark应用程序:WordCount
2.3 使用开发工具Intellij idea编写Spark应用程序
2.3.1 使用开发工具Intellij idea编写Spark应用程序(Scala+Maven)
2.3.2 使用开发工具Intellij idea编写Spark应用程序(Scala+SBT)
2.4 使用开发工具Eclipse编写Spark应用程序
2.4.1 使用开发工具Eclipse编写Spark应用程序(Scala+Maven)
2.4.2 使用开发工具Eclipse编写Spark应用程序(Scala+SBT)
2.5 Spark集群环境搭建
2.6 在集群上运行Spark应用程序
第3章 Spark编程基础
3.1 RDD编程
3.2 键值对RDD
3.3 共享变量
3.4 数据读写
3.4.1 文件数据读写
3.4.2 读写HBase数据

第4章 Spark SQL
4.1 Spark SQL简介
4.2 DataFrame与RDD的区别
4.3 DataFrame的创建
4.4 从RDD转换得到DataFrame
[第4.5节 读取和保存数据]
4.5.1 读写Parquet(DataFrame)
4.5.2 通过JDBC连接数据库(DataFrame)
4.5.3 连接Hive读写数据

第5章 Spark Streaming
5.1 流计算简介
5.2 Spark Streaming简介
第5.3节 DStream操作
5.3.1 DStream操作概述
第5.3.2节 输入源
第5.3.2.1节 基本输入源
5.3.2.1.1 文件流
5.3.2.1.2 套接字流
5.3.2.1.3 RDD队列流
第5.3.2.2节 高级数据源
5.3.2.2.1 Apache Kafka
5.3.2.2.2 Apache Flume
5.3.3 转换操作
5.3.4 输出操作

第6章 Spark MLlib
6.1 Spark MLlib简介
6.2 机器学习工作流
6.2.1 机器学习工作流(ML Pipelines)
6.2.2 构建一个机器学习工作流
6.3 特征抽取、转化和选择
6.3.1 特征抽取:TF-IDF
6.3.2 特征抽取:Word2Vec
6.3.3 特征抽取:CountVectorizer
6.3.4 特征变换:标签和索引的转化
6.3.5 特征选取:卡方选择器
6.4 分类与回归
6.4.1 逻辑斯蒂回归分类器
6.4.2 决策树分类器
6.5 聚类算法
6.4.1 KMeans聚类算法
6.4.2 高斯混合模型(GMM)聚类算法
6.6 推荐算法
6.5.1 协同过滤算法
6.7 机器学习参数调优
6.7.1 模型选择和超参数调整

第7章 Spark GraphX(选修内容,可以不学)
7.1 图计算简介
7.2 Spark GraphX 简介
7.3 Spark GraphX 图操作
7.4 Spark GraphX算法实例

第8章 Structured Streaming(选修内容,可以不学)
8.1 Structured Streaming简介
8.2 Structured Streaming操作概述(包括读取网络流)
8.3 Structured Streaming读取文件流

(备注:前面我们都是在单机或伪分布式环境下操作,现在可以尝试在真正的分布式集群环境下运行Spark,由于Spark集群下编程会导致复杂性大大增加,所以,下面内容可以自由选择是否学习)
第9章 Spark集群搭建及程序运行
9.1 Spark集群环境搭建
9.2 在集群上运行Spark应用程序

第三部分:Spark速成(Spark1.6.2版本)

本部分内容是Spark1.6.2版本,建议学习上面第二部分的Spark2.1.0版本。
第一章 Spark简介
第二章 Spark安装
第三章 Spark运行架构
第四章 RDD的设计与运行原理
第五章 Spark的部署模式
第六章 第一个Spark应用程序:WordCount
第七章 RDD编程
[第八章] 键值对RDD
[补充] 共享变量
第九章 数据读写
[第9.1节] 文件数据读写
第9.2节 读写HBase数据
[第十章] Spark SQL
第10.1节 Spark SQL简介
第10.2节 DataFrame
第10.2.1节 DataFrame与RDD的区别
第10.2.2节 DataFrame的创建
第10.2.3节 从RDD转换得到DataFrame
第10.2.4节 读取和保存数据
第10.2.4.1节 读写Parquet
第10.2.4.2节 通过JDBC连接数据库
第10.2.4.3节 连接Hive读写数据

[第十一章]Spark Streaming
第11.1节 流计算简介
第11.2节 Spark Streaming简介
第11.3节 DStream操作
第11.3.0节 DStream操作概述
第11.3.1节 输入源
第11.3.1.1节 基本输入源
第11.3.1.1.1节 文件流
第11.3.1.1.2节 套接字流
第11.3.1.1.3节 RDD队列流
第11.3.1.2节 高级数据源
第11.3.1.2.1节 Apache Kafka
第11.3.2节 转换操作
第11.3.3节 输出操作

第十二章 Spark MLlib
第12.1节 Spark MLlib简介
第12.2节 spark.mllib库
第12.2.1节 MLlib基本数据类型(1)
第12.2.2节 MLlib基本数据类型(2)
第12.2.3节 基本的统计工具(1)
第12.2.4节 基本的统计工具(2)
第12.2.5节 降维操作
第12.2.5.1节 奇异值分解(SVD)
第12.2.5.2节 主成分分析(PCA)
第12.2.6节 分类与回归
第12.2.6.1节 逻辑斯蒂回归的分类器
第12.2.6.2节 决策树分类器
第12.2.6.3节 支持向量机SVM分类器
第12.2.7节 推荐算法
第12.2.7.1节 协同过滤算法
第12.2.8节 聚类算法
第12.2.8.1节 KMeans聚类算法

第12.3节 spark.ml库
第12.3.1节 工作流
第12.3.1.1节 机器学习工作流
第12.3.1.2节 构建一个机器学习工作流
第12.3.2节 特征抽取、转化和选择
第12.3.2.1节 特征抽取:TF-IDF
第12.3.2.2节 特征抽取:CountVectorizer
第12.3.2.3节 特征抽取:Word2Vec
第12.3.2.4节 标签和索引的转化
第12.3.3节 分类与回归
第12.3.3.1节 逻辑斯蒂回归的分类器
第12.3.3.2节 决策树分类器

(备注:前面我们都是在单机或伪分布式环境下操作,现在可以尝试在真正的分布式集群环境下运行Spark,由于Spark集群下编程会导致复杂性大大增加,所以,下面内容可以自由选择是否学习)
第十三章 Spark集群
第13.1 Spark集群环境搭建
第13.2 在集群上运行Spark应用程序
(以上是Spark1.6.2教程所有内容,不再继续更新,请学习第二部分的Spark2.1.0版本教程)

厦门大学研究生课程《大数据处理技术Spark》

欢迎点击这里访问林子雨老师主讲厦门大学研究生课程《大数据处理技术Spark》2017春季学期班级主页,包含讲义PPT等资料

Spark课程综合实验案例

案例1:淘宝双11数据分析与预测

Spark课程实验案例:淘宝双11数据分析与预测课程案例,由厦门大学数据库实验室团队开发,旨在满足全国高校大数据教学对实验案例的迫切需求。本案例涉及数据预处理、存储、查询和可视化分析等数据处理全流程所涉及的各种典型操作,涵盖Linux、MySQL、Hadoop、Hive、Sqoop、Eclipse、ECharts、Spark等系统和软件的安装和使用方法。案例适合高校(高职)大数据教学,可以作为学生学习大数据课程后的综合实践案例。通过本案例,将有助于学生综合运用大数据课程知识以及各种工具软件,实现数据全流程操作。各个高校可以根据自己教学实际需求,对本案例进行补充完善。
点击这里访问案例主页

案例2:Spark+Kafka构建实时分析Dashboard

大数据课程实验案例:Spark+Kafka构建实时分析Dashboard案例,由厦门大学数据库实验室团队开发,旨在满足全国高校大数据教学对实验案例的迫切需求。本案例涉及数据预处理、消息队列发送和接收消息、数据实时处理、数据实时推送和实时展示等数据处理全流程所涉及的各种典型操作,涵盖Linux、Spark、Kafka、Flask、Flask-SocketIO、Highcharts.js、sockert.io.js、PyCharm等系统和软件的安装和使用方法。案例适合高校(高职)大数据教学,可以作为学生学习大数据课程后的综合实践案例。通过本案例,将有助于学生综合运用大数据课程知识以及各种工具软件,实现数据全流程操作。各个高校可以根据自己教学实际需求,对本案例进行补充完善。
点击这里访问案例主页

案例3:厦门房租信息分析展示(pycharm+python爬虫+pyspark+pyecharts)

从厦门小鱼网爬取租房租金信息,然后利用spark的python版本进行简单分析,并利用echarts的python版本展示分析结果。本案例涉及数据采集和预处理、数据分析和数据可视化等数据处理全流程所涉及的各种典型操作,涵盖Linux、Spark、PyCharm、Python、Echarts等系统和软件的安装和使用方法。案例适合高校(高职)大数据教学,可以作为学生学习大数据课程后的综合实践案例。通过本案例,将有助于学生综合运用大数据课程知识以及各种工具软件,实现数据全流程操作。各个高校可以根据自己教学实际需求,对本案例进行补充完善。
点击这里访问案例主页


点击这里查看大数据学习路线图(大数据学习的最佳路径)