ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

RDD编程初级实践

2021-06-09 22:00:59  阅读:136  来源: 互联网

标签:分区 编程 应用程序 如下 RDD 初级 txt 数据


  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. 数据上传及上传结果查看

数据内容有:

题一:pyspark交互式编程

上传数据结果如下:

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

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

上传数据结果如下:

 

  1. 数据处理过程描述

题一:pyspark交互式编程

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

Tom,DataBase,80

Tom,Algorithm,50

Tom,DataStructure,60

Jim,DataBase,90

Jim,Algorithm,60

Jim,DataStructure,80

……

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

首先进入pyspark:

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

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

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

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

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

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

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

实验步骤如下:

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

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

 

3.    合并成功如下显示:

 

4.    合并结果内容如下:

 

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

每个输入文件表示班级学生某个学科的成绩,每行内容由两个字段组成,第一个是学生名字,第二个是学生的成绩;编写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)放置位置,内容如下:

 

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

 

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

 

 

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

 

6、经验总结

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

标签:分区,编程,应用程序,如下,RDD,初级,txt,数据
来源: https://blog.csdn.net/qq_45064549/article/details/117755128

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有