- 需求描述
在这个全球数据大爆炸的时代,当今最火热的IT词汇,它有几个特点:分别是海量数据、急速、种类繁多和数据真实,围绕大数据而衍生出数据挖掘、数据安全、数据分析、数据存储等,极具商业价值,为诸多行业所用。为此很多大型公司开始开发各种能够快速挖掘、编辑、查找对各种数据快速处理的技术。比如Hadoop技术与Spark技术,本次实验技术是以Spark技术为实验
Spark是基于内存计算的大数据分布式计算框架。Spark基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量廉价硬件之上,形成集群。相较于国内外较多的大数据处理框架,Spark以其低延时的出色表现,正在成为继Hadoop的MapReduce之后,新的、最具影响的大数据框架之一。
- 环境介绍
(不少于100字)
平台系统:Windows10
操作系统:Ubuntu18.4
JDK版本:1.8
Spark版本:3.1.0
Python版本:3.8.0
MYSQL
HBase版本:1.1.5
FileZilla
- 数据来源描述
老师下发的数据来源,数据文件包含A.txt、B.txtx、data.txt、Algorithm.txt、Database.txt、Python.txt。
- 数据上传及上传结果查看
先双击打开软件,点击站点管理-新建站点-把空间提供商或者你自己创建的FTP的主机名,主机名可以在虚拟机终端上ifconfig的命令查看,用户名,密码输入上去,并且点击连接即可进入【默认保存密码下次直接点击连接即可】,进入后左边是本地目录和文件列表,右边为FTP的目录文件列表,你把FTP看作自己的U盘一样管理即可,FTP上,选中文件拖动到...的目录可以把文件移动上一层,拖动相应的文件名为移动到相应目录。文件就上传到虚拟机的存储空间当中。
上传的文件就可在虚拟机中刚刚拖拽的目录中查看到
5、数据处理过程描述
1.pyspark交互式编程
(RDD编程初级实践(1))
本作业提供分析数据data.txt,该数据集包含了某大学计算机系的成绩,数据格式如下所示:
Tom,DataBase,80 Tom,Algorithm,50 Tom,DataStructure,60 Jim,DataBase,90 Jim,Algorithm,60 Jim,DataStructure,80 …… |
请根据给定的实验数据,在pyspark中通过编程来计算以下内容:
- 该系总共有多少学生;
1创建RDD
2拆分每行记录,取出每行的第一个元素
3去除文件中的重复记录
4统计所有重复记录
2. 该系共开设了多少门课程;
1创建RDD
2拆分每行记录,取出每行的第一个元素
3去除文件中的重复记录
4统计所有重复记录
3. Tom同学的总成绩平均分是多少;
1.提取tom的每门成绩,并转化成int类型
2.统计tom有多少门课程
3.统计tom的总成绩
4. 求每名同学的选修的课程门数;
1生成RDD
2求出学生每门课程对应(学生姓名,1),学生有n门课,则有n个学生
3按学生姓名为key,获取每个学生的课程总数
4按照学生姓名分组统计他们的选课程数
5. 该系DataBase课程共有多少人选修;
6.各门课程的平均分是多少;
1生成RDD
2为每门课程的分数后面行政一列1,表示一个学生选择了该门课程,
3按课程名称统计总分数和选课人数
4求平均分
(7)使用累加器计算共有多少人选了DataBase这门课。
2.编写独立应用程序实现数据去重
对于两个输入文件A和B,编写Spark独立应用程序,对两个文件进行合并,并剔除其中重复的内容,得到一个新文件C。本文给出门课的成绩(A.txt、B.txt)下面是输入文件和输出文件的一个样例,供参考。
(RDD编程初级实践(2))
输入文件A的样例如下:
20200101 x
20200102 y
20200103 x
20200104 y
20200105 z
20200106 z
输入文件B的样例如下:
20200101 y
20200102 y
20200103 x
20200104 z
20200105 y
根据输入的文件A和B合并得到的输出文件C的样例如下:
20200101 x
20200101 y
20200102 y
20200103 x
20200104 y
20200104 z
20200105 y
20200105 z
20200106 z
实验步骤如下:
1.将A.txt和B.txt文件转化为A和B文件
2.编写py执行文件
3.代码执行过程
4.运行结果
3.编写独立应用程序实现求平均值问题
每个输入文件表示班级学生某个学科的成绩,每行内容由两个字段组成,第一个是学生名字,第二个是学生的成绩;编写Spark独立应用程序求出所有学生的平均成绩,并输出到一个新文件中。本文给出门课的成绩(Algorithm.txt、Database.txt、Python.txt),下面是输入文件和输出文件的一个样例,供参考。
(13周实验)
Algorithm成绩:
小明 92
小红 87
小新 82
小丽 90
Database成绩:
小明 95
小红 81
小新 89
小丽 85
Python成绩:
小明 82
小红 83
小新 94
小丽 91
平均成绩如下:
(小红,83.67)
(小新,88.33)
(小明,89.67)
(小丽,88.67)
实验答案参考步骤如下:
- 假设当前目录为/usr/local/spark/mycode/avgscore,在当前目录下新建一个avgscore.py;
|
(2)最后在目录/usr/local/spark/mycode/avgscore下执行下面命令执行程序(注意执行程序时请先退出pyspark shell,否则会出现“地址已在使用”的警告)。
|
- 在目录/usr/local/spark/mycode/avgscore/result下即可得到结果文件part-00000。
数组越界,最终本实验因为报错实现不了,上网查了很多方法修改了pyspark的配置文件也没有得到解决。
- 经验总结
通过本次大作业实验我深刻的体会到了spark sql对数据处理的方便快捷的特点,在处理大批量数据时,RDD弹性数据集具有高效的数据处理能力,去重、查询、组合数据都能高效、省时。在实验中总结出RDD的运行原理。执行sc.textFile()方法,Spark会从本地文件中的txt文件中加载数据到内存,在内存中生成一个RDD对象。Lines是org.apache.spark.rdd.RDD类中的一个实例对于RDD而言,每一次转换操作都会产生不同的RDD,供给下一个操作使用,RDD的转换过程是惰性求值的,也就是说,整个转换过程只记录了转换的轨迹,并不会发生真正的计算,只有遇到行动操作时,才会触发从头到尾的真正的计算,执行lines.map()操作,map()的输入参数lambda line:line.split(‘’)是一个lambda表达式。Lines.map(lambda line:line.split(“”))的含义是,依次取出lines这个RDD中的每个元素。对于当前取到的元素,把它赋值给lambda表达式中的line,然后,执行Lambda表达式的函数体不妨嗯line.split(“”)。
通过本学期的课程学习,我初步学会了Spark里面的RDD编程,RDD称为弹性分布数据集,是一个分布式的元素集合每个 RDD 都被分为多个分区,这些分区运行在集群中的不同节点上。RDD 可以包含 Python、Java、Scala 中任意类型的对象,甚至可以包含用户自定义的对象。用户可以使用两种方法创建 RDD:读取一个外部数据集,或在驱动器程序里分发驱动器程序中的对象集合。
RDD 支持两种操作:转化操作和行动操作。RDD 的转化操作是返回一个新的 RDD 的操作,比如 map() 和 filter() ,而行动操作则是向驱动器程序返回结果或把结果写入外部系统的操作,会触发实际的计算,比如 count() 和 first()
在实验过程中也碰到过很多数组越界的错误,类似于如下图的错误
问题出现于版本不支持。
最后,要感谢本学期大数据应用技术课程的授课老师吉立建老师的尊尊教诲,每堂课都会耐心指导我们课程内容,让我们能够更清晰地、更容易的掌握课程内容。
参考文献
[1] https://blog.51cto.com/u_6216083/1845949.
[2] https://blog.csdn.net/u013841458/article/details/90074908.