1. 需求描述

本次实验需要对给定数据进行RDD的基本操作,使用RDD编程实现解决具体问题的方法。内容要求分为三个部分:

  1. pyspark交互式编程

根据给定大学成绩数据集,用pyspark来进行编程,分析并计算以下内容:

(1)该系总共有多少学生;

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

(3)Tom同学的总成绩平均分是多少;

(4)求每名同学的选修的课程门数;

(5)该系DataBase课程共有多少人选修;

(6)各门课程的平均分是多少;

(7)使用累加器计算共有多少人选了DataBase这门课。

2.编写独立应用程序实现数据去重

对于两个输入文件A和B,编写Spark独立应用程序,对两个文件进行合并,并剔除其中重复的内容,得到一个新文件C。文件C的样例如下:

20200101    x

20200101    y

20200102    y

20200103    x

20200104    y

20200104    z

20200105    y

20200105    z

20200106    z

3.编写独立应用程序实现求平均值问题

编写Spark独立应用程序求出所有学生的平均成绩,并输出到一个新文件中。

 

  1. 环境介绍

该实验考察学生对使用PySpark进行编程的熟悉程度。Spark是专为大规模数据处理设计的快速通用计算引擎,是与Hadoop相似的开源集群计算环境,但在某些工作负载方面表现得比Hadoop更优秀。

本实验使用Oracle VM VirtualBox上的Linux操作系统Ubuntu Kylin,版本为16.04,虚拟机上需要架构好Spark(2.4.0)环境。本实验使用Python(3.4.3)进行数据操作。

  1. 数据来源描述

1.pyspark交互式编程

该数据是某所大学计算机系的学生成绩,数据文件为data.txt,格式如下所示:

Tom,DataBase,80

Tom,Algorithm,50

Tom,DataStructure,60

Jim,DataBase,90

Jim,Algorithm,60

Jim,DataStructure,80

……

2.编写独立应用程序实现数据去重

本实验给出门课的成绩(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

3.编写独立应用程序实现求平均值问题

本实验给出门课的成绩(Algorithm.txt、Database.txt、Python.txt)。每个输入文件表示班级学生某个学科的成绩,每行内容由两个字段组成,第一个是学生名字,第二个是学生的成绩。样例如下:

Algorithm成绩:

小明 92

小红 87

小新 82

小丽 90

Database成绩:

小明 95

小红 81

小新 89

小丽 85

Python成绩:

小明 82

小红 83

小新 94

小丽 91

 

  1. 数据上传及上传结果查看
  1. pyspark交互式编程

2.编写独立应用程序实现数据去重

3.编写独立应用程序实现求平均值问题

5、数据处理过程描述

  1. pyspark交互式编程
  1. 该系总共有多少学生;
    1. 创建RDD
    2. 拆分每行记录,取出每行第一个元素
    3. 去除文件中的重复记录
    4. 统计所有未重复记录

  1. 该系共开设了多少门课程;

  1. Tom同学的总成绩平均分是多少;
    1. 提取Tom的每门成绩,并转换为int类型
    2. 统计Tom有多少门课程
    3. 统计Tom的总成绩

  1. 求每名同学的选修的课程门数;
    1. 生成RDD
    2. 求出学生每门课程对应(学生姓名,1),学生有n门课,则有n个学生
    3. 按学生姓名为key,获取每个学生的课程总数
    4. 按照学生姓名分组统计他们选修课程数

  1. 该系DataBase课程共有多少人选修;
    1. 生成RDD
    2. 为每门课程的分数后面新增一列1,表示一个学生选择了该门课程

  1. 各门课程的平均分是多少;

  1. 使用累加器计算共有多少人选了DataBase这门课。

 

2.编写独立应用程序实现数据去重

(1)分别创建A与B的RDD

(2)生成包含A和B两个RDD所有元素的新RDD

(3)对数据进行去重(利用distinct函数,图中临时注释掉了)

(4)对值进行排序

(5)将结果用repartition合并,写入result文件夹

结果为:

3.编写独立应用程序实现求平均值问题

(1)初始化SparkContext,分别生成三个文件的RDD

(2)合并三个文件为一

(3)为每列数据增加一列1以统计学生选修科目数量

(4)计算每个学生的总成绩和选修数目

(5)用总成绩除以选修课程数,以计算学生每门课程的平均分(保留两位小数)

(6)将结果写入文件

平均分结果为:

 

6、经验总结

本节课程让我接触到了目前大数据的前沿技术之一——Spark计算引擎,该引擎有Hadoop的优点,但在数据存储方面比Hadoop更优秀,内存计算速度比Hadoop快上100倍。

通过将近20周的学习,我学会了Spark环境的搭建,复习了Python与SQL的语法并使用它们在Spark上进行了数据的操作处理。其中最重要的一个概念是RDD,它是Spark提供的一种抽象数据集,分布在集群的节点上,用函数操作集合的方式来进行并行操作。

本次实验主要考察的就是我们对RDD的了解和熟悉程度,通过实际操作,我学习到RDD是只读数据,不能修改,只能通过转换生成新的RDD。对文件进行数据操作需要构建RDD,再通过各种函数进行数据集操作,例如去重、合并、分词等等。

更多推荐

RDD编程初级实践-课程论文