2021-06-10

RDD编程初级实践

1、 需求描述
本次实验需要在Ubuntu系统下进行,需安装好spark和Python,以便操作,下面是此次试验的需求及分析
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)

2、 环境介绍
RDD(Resilient Distributed Datasets,弹性分布式数据集)是一个分区的只读记录的集合。RDD只能通过在稳定的存储器或其他RDD的数据上的确定性操作来创建。我们把这些操作称作变换以区别其他类型的操作。例如 map、filter和join。

RDD在任何时候都不需要被“物化”(进行实际的变换并最终写入稳定的存储器上)。实际上,一个RDD有足够的信息描述着其如何从其他稳定的存储器上的数据生成。它有一个强大的特性:从本质上说,若RDD失效且不能重建,程序将不能引用该RDD。而用户可以控制RDD的其他两个方面:持久化和分区。用户可以选择重用哪个RDD,并为其制定存储策略(比如:内存存储)。也可以让RDD中的数据根据记录的key分布到集群的多个机器。 这对位置优化来说是有用的,比如可用来保证两个要jion的数据集都使用了相同的哈希分区方式。

Spark 编程接口,对编程人员通过对稳定存储上的数据进行变换操作(如map和filter)。而得到一个或多个RDD。然后可以调用这些RDD的actions(动作)类的操作。这类操作的目是返回一个值或是将数据导入到存储系统中。动作类的操作如count(返回数据集的元素数),collect(返回元素本身的集合)和save(输出数据集到存储系统)。Spark直到RDD第一次调用一个动作时才真正计算RDD。

3、 数据来源描述
网上爬虫
4、 数据上传及上传结果查看
数据上传
在这里插入图片描述在这里插入图片描述

数据A上传成功
在这里插入图片描述

数据B上传成功
在这里插入图片描述

数据Algorithm上传成功
在这里插入图片描述

数据Database上传成功
在这里插入图片描述

数据Python上传成功

在这里插入图片描述

5、数据处理过程描述
第一题pyspark交互式编程
(1) 该系总共有多少学生;
在这里插入图片描述

(2) 该系共开设了多少门课程;

在这里插入图片描述

(3) Tom同学的总成绩平均分是多少;
在这里插入图片描述在这里插入图片描述

(4) 求每名同学的选修的课程门数;
在这里插入图片描述

(5) 该系DataBase课程共有多少人选修;
在这里插入图片描述

(6) 各门课程的平均分是多少;
在这里插入图片描述

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

第二题编写独立应用程序实现数据去重
对于两个输入文件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
数据处理及结果
创建文件remdup.py
在这里插入图片描述

编辑remdup.Py
在这里插入图片描述

运行remdup.py
在这里插入图片描述

运行结果
在这里插入图片描述在这里插入图片描述

第三题编写独立应用程序实现求平均值问题
每个输入文件表示班级学生某个学科的成绩,每行内容由两个字段组成,第一个是学生名字,第二个是学生的成绩;编写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)
数据处理及结果
创建文件avgscore.py
在这里插入图片描述

编辑文件avgscore.Py
在这里插入图片描述

运行avgscore.py及结果
在这里插入图片描述在这里插入图片描述

6、经验总结

对于此次试验,我有以心得:此次试验能使我通过RDD的一些基本命令操作来理解RDD的原理,比如map()将函数应用于RDD中的每个元素,将返回新的RDD;filter()过滤,结果返回一个由通过传给filter()的函数的元素组成的RDD;distinct()是去重;编写代码的时候要细心,中英文得看清,大小写也要注意;RDD是分布式只读且已分区集合对象。这些集合是弹性的,如果数据集一部分丢失,则可以对它们进行重建。具有自动容错、位置感知调度和可伸缩性,而容错性是最难实现的,大多数分布式数据集的容错性有两种方式:数据检查点和记录数据的更新。对于大规模数据分析系统,数据检查点操作成本高,主要原因是大规模数据在服务器之间的传输带来的各方面的问题,相比记录数据的更新,RDD也只支持粗粒度的转换,也就是记录如何从其他RDD转换而来,以便恢复丢失的分区;

参考文献
[1] 孟真.基于Spark的高考推荐系统设计与实现[D].山东师范大学,2017.

[2] 1]林曽,基于MapReduce的Apriori算法的并行实现[C].第13届ACM软件工程、人工智能、网络与并行与分布式计算国际会议,IEEE计算机学会.日本京都:2012年:236-241.
[3]郭建.基于编码和MapReduce的Apriori改进算法研究[C].第10届Web信息系统与应用会议(WISA,2013),IEEE计算机学会.江苏扬州,2013:294-299.

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值