2021-06-10

RDD编程实践

RDD编程实践

1、需求描述
Spark 的核心是建立在统一的抽象弹性分布式数据集(Resiliennt Distributed Datasets,RDD)之上的,这使得 Spark 的各个组件可以无缝地进行集成,能够在同一个应用程序中完成大数据处理。
RDD 是 Spark 提供的最重要的抽象概念,它是一种有容错机制的特殊数据集合,可以分布在集群的结点上,以函数式操作集合的方式进行各种并行操作。
通俗点来讲,可以将 RDD 理解为一个分布式对象集合,本质上是一个只读的分区记录集合。每个 RDD 可以分成多个分区,每个分区就是一个数据集片段。一个 RDD 的不同分区可以保存到集群中的不同结点上,从而可以在集群中的不同结点上进行并行计算。
本次实验需要熟悉Spark的RDD基本操作及键值对操作以及熟悉使用RDD编程解决实际具体问题的方法。
2、环境介绍
Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
spark用于实现快速通用的集群计算平台,用来构建大型的、低延迟的数据分析应用程序。它扩展了广泛使用的MapReduce计算模型。高效的支撑更多计算模式,包括交互式查询和流处理。spark的一个主要特点是能够在内存中进行计算,及时依赖磁盘进行复杂的运算,Spark依然比MapReduce更加高效。RDD弹性分布式数据集(RDD)是其设计的核心为内存计算、适合计算机集群、高效率容错的可以在 Spark 上进行并行操作的关于分区数据元素的集合且是只读的在 Spark。
兼容性:
Spark可以非常方便地与其他的开源产品进行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作为它的资源管理和调度器,器,并且可以处理所有Hadoop支持的数据,包括HDFS、HBase和Cassandra等。这对于已经部署Hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用Spark的强大处理能力。Spark也可以不依赖于第三方的资源管理和调度器,它实现了Standalone作为其内置的资源管理和调度框架,这样进一步降低了Spark的使用门槛,使得所有人都可以非常容易地部署和使用Spark。此外,Spark还提供了在EC2上部署Standalone的Spark集群的工具。
spark的组成:
Spark组成(BDAS):全称伯克利数据分析栈,通过大规模集成算法、机器、人之间展现大数据应用的一个平台。也是处理大数据、云计算、通信的技术解决方案。
它的主要组件有:
SparkCore:将分布式数据抽象为弹性分布式数据集(RDD),实现了应用任务调度、RPC、序列化和压缩,并为运行在其上的上层组件提供API。
SparkSQL:Spark Sql 是Spark来操作结构化数据的程序包,可以让我使用SQL语句的方式来查询数据,Spark支持 多种数据源,包含Hive表,parquest以及JSON等内容。
SparkStreaming: 是Spark提供的实时数据进行流式计算的组件。
MLlib:提供常用机器学习算法的实现库。
GraphX:提供一个分布式图计算框架,能高效进行图计算。
BlinkDB:用于在海量数据上进行交互式SQL的近似查询引擎。
Tachyon:以内存为中心高容错的的分布式文件系统。
为了支持Python语言使用Spark,Apache Spark社区开发了一个工具PySpark。利用PySpark中的Py4j库,我们可以通过Python语言操作RDDs。
PySpark提供了PySpark Shell,它是一个结合了Python API和spark core的工具,同时能够初始化Spark环境。
应用场景:
1.Yahoo将Spark用在Audience Expansion中的应用,进行点击预测和即席查询等
2.淘宝技术团队使用了Spark来解决多次迭代的机器学习算法、高计算复杂度的算法等。应用于内容推荐、社区发现等
3.腾讯大数据精准推荐借助Spark快速迭代的优势,实现了在“数据实时采集、算法实时训练、系统实时预测”的全流程实时并行高维算法,最终成功应用于广点通pCTR投放系统上。
4.优酷土豆将Spark应用于视频推荐(图计算)、广告业务,主要实现机器学习、图计算等迭代计算。
本实验具体运行的Ubuntu16.04环境如下:
Hadoop2.7.1、Spark2.1.0、HBase1.1.5、JDK1.8、Scala2.11.8、MySQL
操作系统:Ubuntu18.4
Spark版本:2.4.0
Python版本:3.7.0
3、数据来源描述
大数据的来源非常广泛,如信息管理系统、网络信息系统、、物联网系统、科学实验系统等,其数据类型包括结构化数据、半结构化数据和非结构化数据。(1)信息管理系统:企业内部使用的信息系统,包括办公自动化等。信息管理系统主要通过用户数据和系统二次加工的方式产生数据,其产生的大数据大多数为结构化数据,通常存储在数据库中。
(2)网络信息系统:基于网络运行的信息系统即网络信息系统是大数据产生的重要方式,如电子商务系统、社交网络、社会媒体、搜索引擎等都是常见的网络信息系统。网络信息系统产生的大数据多为半结构化或非结构化的数据。(3)物联网系统:物联网是新- -代信息技术,其核心和基础仍然是互联网,是在互联网基础上的延伸和扩展的网络,其用户端延伸和扩展到了任何物品与物品之间,进行信息交换和通信,而其具体实现是通过传感技术获取外界的物理、化学和生物等数据信息。(4)科学实验系统:主要用于科学技术研究,可以由真实的实验产生数据,也可以通过模拟方式获取仿真数据
本次RDD编程实践数据来源主要按照实验课程相关规定,从各大互联网平台,如百度、新浪、搜狗、字节跳动等平台获取符合要求的相关数据,经过一一筛选,最终选定教材官网的“下载专区”的“数据集”中下载。
1、某大学计算机系的成绩数据集hgj.txt
2、某大学计算机系课程的学号成绩(A.txt、B.txt)
3、某大学计算机系课程的成绩包含姓名与成绩(Algorithm.txt、Database.txt、Python.txt)
4、数据上传及上传结果查看
(1)相关数据导入:
2021-06-10_第1张图片

4.1.1图

(2)Pyspark交互式编程:
2021-06-10_第2张图片

4.2.1图

(3)编写独立应用程序实现数据去重
2021-06-10_第3张图片

4.3.1图
2021-06-10_第4张图片

4.3.2图

(4)编写独立应用程序实现求平均值问题
2021-06-10_第5张图片

4.4.1图
2021-06-10_第6张图片

4.4.2图
2021-06-10_第7张图片

4.4.3图

5、数据处理过程描述
(1)pyspark交互式编程
① 该系总共有多少学生:
2021-06-10_第8张图片

5.1.1图
② 该系共开设了多少门课程;
2021-06-10_第9张图片

5.1.2图

③ Tom同学的总成绩平均分是多少:
2021-06-10_第10张图片

5.1.3图

④ 求每名同学的选修的课程门数:
2021-06-10_第11张图片

5.1.4图

⑤ 该系DataBase课程共有多少人选修:
在这里插入图片描述

5.1.5图

⑥ 各门课程的平均分是多少:
2021-06-10_第12张图片

5.1.6图

⑦ 使用累加器计算共有多少人选了DataBase这门课:
在这里插入图片描述

5.1.7图

(2)编写独立应用程序实现数据去重
对于两个输入文件A和B,编写Spark独立应用程序,对两个文件进行合并,并剔除其中重复的内容,得到一个新文件C。

① 编写代码:
2021-06-10_第13张图片

5.2.1图

② 运行结果:
2021-06-10_第14张图片

5.2.2图

2021-06-10_第15张图片

5.2.3图

(3)编写独立应用程序实现求平均值问题
每个输入文件表示班级学生某个学科的成绩,每行内容由两个字段组成,第一个是学生名字,第二个是学生的成绩;编写Spark独立应用程序求出所有学生的平均成绩,并输出到一个新文件中。

① 编写代码:
2021-06-10_第16张图片

5.3.1图

② 运行结果:
2021-06-10_第17张图片

5.3.2图

6、经验总结
通过这次的期末实验大作业的学习和完成,我更加熟悉了对rdd内容的理论知识,并开始懂得如何去上手完成基本的的简单操作。不仅如此,这次还学会了如何加载数据创建RDD以及其转换等操作,通过这次的期末实践,更加巩固了老师课堂讲授的知识点,运用到实践中,才真正地明白了其中的步骤和效果。在本次实验的后半段,开始要熟悉地使用RDD编程解决实际具体问题,这花费了我大量的课堂时间以及课后时间去不断的操作实践,从刚开始看不出程序的报错结果,通过询问老师,同学以及上网查询资料,观看教学视频等方法,不断的重复训练,最终成功地掌握了使用RDD编程解决实际具体问题的技能,但也反映出自身知识点掌握不熟练、基础薄弱等问题和漏洞,在日后的学习和工作中,我会加强这方面的训练,多实践,多操作,注重理论知识的学习,把理论与实践结合起来。

你可能感兴趣的:(spark)