2021-06-10

RDD编程初级实践

一、环境介绍
Spark使用Scala语言进行实现,它是一种面向对象、函数式编程语言,能够像操作本地集合对象一样轻松地操作分布式数据集(Scala 提供一个称为 Actor 的并行模型,其中Actor通过它的收件箱来发送和接收非同步信息而不是共享数据,该方式被称为:Shared Nothing 模型)。在Spark官网上介绍,它具有运行速度快、易用性好、通用性强和随处运行等特点。
Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行计算框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。Spark是Scala编写,方便快速编程。
Spark具有如下几个主要特点:
运行速度快: 使用DAG执行引擎以支持循环数据流与内存计算
容易使用: 支持使用Scala、Java、Python和R语言进行编程,可以 通过Spark Shell进行交互式编程
通用性: Spark提供了完整而强大的技术栈,包括SQL查询、流式 计算、机器学习和图算法组件
运行模式多样: 可运行于独立的集群模式中,可运行于Hadoop中 ,也可运行于Amazon EC2等云环境中,并且可以访问HDFS、 Cassandra、HBase、Hive等多种数据源
Spark与Hadoop MapReduce的比较
Hadoop MapReduce存在如下一些缺点
表达能力有限 : 仅存在Map和Reduce两个算子,难以描述复杂计算过程
磁盘IO开销大: 每次作业均需要从磁盘读取数据,中间结果同样写入磁盘
延迟高: MapReduce各个任务间涉及IO开销,存在延迟 。前一个任务完成前,其它任务无法开展
相比于Hadoop MapReduce,Spark主要具有如下优点:
Spark的计算模式也属于MapReduce,但不局限于Map和 Reduce操作,还提供了多种数据集操作类型,编程模型比 Hadoop MapReduce更灵活
Spark提供了内存计算,可将中间结果放到内存中,对于迭代 运算效率更高
Spark基于DAG的任务调度执行机制,要优于Hadoop MapReduce的迭代执行机制。

二、需求描述
(1)pyspark交互式编程
本作业提供分析数据data.txt,该数据集包含了某大学计算机系的成绩,数据格式如下所示:
Tom,DataBase,80
Tom,Algorithm,50
Tom,DataStructure,60
Jim,DataBase,90
Jim,Algorithm,60
Jim,DataStructure,80
……
请根据给定的实验数据,在pyspark中通过编程来计算以下内容:
(1)该系总共有多少学生;
(2)该系共开设了多少门课程;
(3)Tom同学的总成绩平均分是多少;
(4)求每名同学的选修的课程门数;
(5)该系DataBase课程共有多少人选修;
(6)各门课程的平均分是多少;
(7)使用累加器计算共有多少人选了DataBase这门课。

(2)编写独立应用程序实现数据去重
对于两个输入文件A和B,编写Spark独立应用程序,对两个文件进行合并,并剔除其中重复的内容,得到一个新文件C。本文给出门课的成绩(A.txt、B.txt)下面是输入文件和输出文件的一个样例,供参考。
输入文件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

(3)编写独立应用程序实现求平均值问题
每个输入文件表示班级学生某个学科的成绩,每行内容由两个字段组成,第一个是学生名字,第二个是学生的成绩;编写Spark独立应用程序求出所有学生的平均成绩,并输出到一个新文件中。本文给出门课的成绩(Algorithm.txt、Database.txt、Python.txt),下面是输入文件和输出文件的一个样例,供参考。
Algorithm成绩:
小明 92
小红 87
小新 82
小丽 90
Database成绩:
小明 95
小红 81
小新 89
小丽 85
Python成绩:
小明 82
小红 83
小新 94
小丽 91
平均成绩如下:
(小红,83.67)
(小新,88.33)
(小明,89.67)
(小丽,88.67)

三、实验平台
操作系统:Ubuntu16.04
Spark版本:2.4.0
Python版本:3.4.3

四、实验步骤
(1)把以下的文本数据传入Ubuntu系统里,如图1.1
A.txt Algorithm.txt B.txt data.txt Database.txt Python.txt
在这里插入图片描述

                            图1.1

(2)启动spark,如图1.2
在这里插入图片描述

                       图1.2

本作业提供分析数据data.txt,该数据集包含了某大学计算机系的成绩
(3)该系总共有多少学生?如图1.3
在这里插入图片描述

图1.3
(4)该系共开设了多少门课程?如图1.4
在这里插入图片描述

图1.4
(5)Tom同学的总成绩平均分是多少?如图1.5、1.6
在这里插入图片描述

图1.5
在这里插入图片描述

图1.6
(6)求每名同学的选修的课程门数,如图1.7
在这里插入图片描述

图1.7
(7)该系DataBase课程共有多少人选修?如图1.8
在这里插入图片描述

图1.8
(8)各门课程的平均分是多少?如图1.9、2.0
在这里插入图片描述

图1.9
在这里插入图片描述

图2.0
(9)使用累加器计算共有多少人选了DataBase这门课,如图2.1
在这里插入图片描述

图2.1
本作业给出门课的成绩(A.txt、B.txt)下面是输入文件和输出文件的一个样例,供参考。
(10)输入文件如图2.2、2.3
在这里插入图片描述

图2.2
在这里插入图片描述

图2.3
(11)在usr/local/spark/mycode/data路径下新建一个py文件,名为avg3.py,如图2.4
在这里插入图片描述

图2.4
(12)运行avg3.py文件,并查看生成的文件,如图2.5
在这里插入图片描述

图2.5
(13)C是输出文件,进入文件C查看结果,如图2.6、2.7
在这里插入图片描述

图2.6
在这里插入图片描述

图2.7 
本文给出门课的成绩(Algorithm.txt、Database.txt、Python.txt),下面是输入文件和输出文件的一个样例,供参考。
(14)输入文件如图2.8、2.9、3.0
在这里插入图片描述

图2.8
在这里插入图片描述

图2.9
在这里插入图片描述

图3.0
(15)在usr/local/spark/mycode/data路径下新建一个py文件,名为avg4.py,如图3.1
在这里插入图片描述

图3.1
(16)运行avg4.py文件后,resiltD是输出文件,进入文件resultD查看结果,如图3.2、3.3
在这里插入图片描述

图3.2
在这里插入图片描述

图3.3

五、实验总结
在这次期末大作业,我遇到了一些问题。例如:主机的文件不能通过直接拉拽拖入Ubuntu,必须通过微信或者qq邮箱等方式来解决这个问题;还有spark环境要提前安装好,没有这个环境是做不了本次期末大作业;清楚文件所放的位置,编辑代码时需要用到文件相对应的位置;最后一个题目的3个文件,里面的空白行都要删除干净,不然完成不了题目所给的要求等。通过这次期末大作业,我懂得了做事情不能急,一定要按部就班,并且有报错要认真对待,直到没有错误为止。从中我熟悉了Spark的RDD基本操作及键值对操作,还有熟悉了使用RDD编程解决实际具体问题的方法。刚开始做实验的时候环境没配置好,导致停滞不前。但是最后还是通过自己的努力,一步一步的完成该项目,之后还会继续努力。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值