RDD编程初级实践

  1. 需求描述

本次实验需基于spark下的RDD的概念理解,通过代码完成实验。RDD叫做弹性分布式数据集,是Spark中最基本的数据抽象。代码中是一个抽象类,它代表一个不可变、可分区、里面的元素可并行计算的集合。从课上可以了解到RDD的属性是由一组分区(Partition),即数据集的基本组成单位;一个计算每个分区的函数;RDD之间的依赖关系;一个Partitioner,即RDD的分片函数;一个列表,存储存取每个Partition的优先位置(preferred location)。其特点生成的RDD不可改变只能通过转换操作性生成一个新的RDD,新的RDD包含了从其他RDD衍生所必需的信息。RDDs之间存在依赖,RDD的执行是按照血缘关系延时计算的。如果血缘关系较长,可以通过持久化RDD来切断血缘关系。RDD的两种算子有两类,一类叫做transformations,它是用来将RDD进行转化,构建RDD的血缘关系;另一类叫做actions,它是用来触发RDD的计算,得到RDD的相关计算结果或者将RDD保存的文件系统中。其缓存:如果在应用程序中多次使用同一个RDD,可以将该RDD缓存起来,该RDD只有在第一次计算的时候会根据血缘关系得到分区的数据,在后续其他地方用到该RDD的时候,会直接从缓存处取而不用再根据血缘关系计算,这样就加速后期的重用。如下图所示,RDD-1经过一系列的转换后得到RDD-n并保存到hdfs,RDD-1在这一过程中会有个中间结果,如果将其缓存到内存,那么在随后的RDD-1转换到RDD-m这一过程中,就不会计算其之前的RDD-0了。

  1. 环境介绍

使用的是oracle VM virtualBox,虚拟机的操作系统为Ubuntu16.04,Spark版本为2.4.0,Python版本为3.4.3,,虚拟机的内存为6G,hadoop为2.7.1,JDK版本为1.8,使用Mysql数据库,Hbase为1.1.5,Scala为2.11.8,主机为8G内存128固态加1T机械,i5八代,独立显卡为GTX1050ti,使用的win10专业版。

  1. 数据来源描述

此次数据文件分别为A.txt, Algorithm.txt,B.txt,data.txt,Database.txt,Python.txt六个txt文档,由老师编辑而成,作为我们此次实验的前提内容条件。Adata.txt为”

题一:pyspark交互式编程的实验数据。A.txt,B.txt为“:编写独立应用程序实现数据去重”的实验数据。Algorithm.txt,Database.txt,Python.txt为“题三:编写独立应用程序实现求平均值问题”的实验数据。

其格式如下:

  1. txt,B.txt(例如:20200101    x)

data,txt(例如:Aaron,OperatingSystem,100)

Database.txt,Python.txt,Algorithm.txt(例如:小明a 92)

  1. 数据上传及上传结果查看

数据内容有:

RDD编程初级实践

题一:pyspark交互式编程

上传数据结果如下:RDD编程初级实践

题二:编写独立应用程序实现数据去重

上传数据结果如下:RDD编程初级实践题三:编写独立应用程序实现求平均值问题

上传数据结果如下:

RDD编程初级实践  

RDD编程初级实践

  1. 数据处理过程描述

题一:pyspark交互式编程

本作业提供分析数据data.txt,该数据集包含了某大学计算机系的成绩,数据格式如下所示:

Tom,DataBase,80

Tom,Algorithm,50

Tom,DataStructure,60

Jim,DataBase,90

Jim,Algorithm,60

Jim,DataStructure,80

……

根据给定的实验数据,在pyspark中通过编程来计算以下内容:

首先进入pyspark:

RDD编程初级实践

  1. 该系总共有多少学生;

RDD编程初级实践

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

RDD编程初级实践

  1. Tom同学的总成绩平均分是多少;

RDD编程初级实践

RDD编程初级实践

  1. 求每名同学的选修的课程门数;

RDD编程初级实践

  1. 该系DataBase课程共有多少人选修;

RDD编程初级实践

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

RDD编程初级实践

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

RDD编程初级实践

题二:编写独立应用程序实现数据去重

对于两个输入文件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

实验步骤如下:

1.    文件AB放置位置,内容如下:

RDD编程初级实践

2.    编写Spark独立应用程序c.py,合并AB内容为result

 RDD编程初级实践

3.    合并成功如下显示:

 RDD编程初级实践

4.    合并结果内容如下:

RDD编程初级实践

 

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

每个输入文件表示班级学生某个学科的成绩,每行内容由两个字段组成,第一个是学生名字,第二个是学生的成绩;编写Spark独立应用程序求出所有学生的平均成绩,并输出到一个新文件中。本文给出门课的成绩(Algorithm.txt、Database.txt、Python.txt),下面是输入文件和输出文件的一个样例,供参考。

  1. Algorithm成绩:

小明 92

小红 87

小新 82

小丽 90

  1. Database成绩:

小明 95

小红 81

小新 89

小丽 85

  1. Python成绩:

小明 82

小红 83

小新 94

小丽 91

  1. 平均成绩如下:

(小红,83.67)

(小新,88.33)

(小明,89.67)

(小丽,88.67)

实验步骤如下:

1.    文件(Algorithm.txt、Database.txt、Python.txt)放置位置,内容如下:

 RDD编程初级实践

2.    编写Spark独立应用程序avg.py,求平均值

 

RDD编程初级实践

3.    求平均值成功如下显示:dsfd

 

  RDD编程初级实践

4.    平均值结果内容如下:

RDD编程初级实践RDD编程初级实践

 

6、经验总结

  1. 编辑地址时,file :///(后面需要加三个/)
  2. RDD:弹性分布式数据集,是Spark上最基本,也是最根本的数据抽象,是只读的、分区记录的集合,是分布式内存的一个抽象概念,它提供了一种高度受限的共享内存模型。
  3. DAG:有向无环图,它由RDD之间的依赖关系构成,反映了RDD之间的依赖关系。
  4. stage:阶段,是作业的基本调度单位,一个作业有多个任务,每组任务被成为“阶段”,或者“任务集”。
  5. 分区:数据集片段,RDD是分布式对象集合,在本质上是只读的,分区记录的集合,所以每个RDD可以分成多个分区,每个分区就是一个数据集片段。
  6. 宽依赖:一对多。就是存在一个父RDD的一个分区被一个子RDD的多个分区所使用,可以看成是数据分发。
  7. 窄依赖:一对一,或者多对一。就是当父RDD的一个分区只被一个子RDD的一个分区所使用;或者多个父RDD汇总到一个子 RDD上,可以看成是数据汇总。
上一篇:07 从RDD创建DataFrame


下一篇:独孤九剑-Spark面试80连击(上)