ICode9

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

大数据技术——RDD编程初级实践

2021-06-19 16:31:42  阅读:128  来源: 互联网

标签:编程 应用程序 RDD 初级 Spark 数据 spark


RDD编程初级实践

1、 需求描述

在当今社会,随着大数据的快速发展情况下,大数据已经完全融入到我们的生活中。为了适应各种信息化技术的快速发展,我作为计算机专业的学生,学习大数据这项技术是必不可少的。这次的实验是RDD编程初级实践,我们需要熟悉Spark的RDD基本操作和键值对操作同时还要熟悉使用RDD编程解决实际具体问题的方法。

2、 环境介绍

这次的实验主要用到的是操作系统Ubuntu16.04版本Spark版本:2.4.0以及Python版本:3.4.3。Spark为结构化数据处理引入了一个称为Spark SQL的编程模块。spark-1.6以前它提供了一个称为DataFrame的编程抽象,并且可以充当分布式SQL查询引擎。 SparkSQL在RDD之上抽象出来Dataset/Dataframe 这两个类提供了类似RDD的功能,也就意味用户可以使用map、flatMap、filter等高阶算子,同时也通过了基于列的命名查询,也就是说Dataset/DataFrame提供了两套操作数据的API,这些API可以给Saprk引擎要提供更多信息,系统可以根据这些信息对计算实现一定的优化。Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架,最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一,与Hadoop和Storm等其他大数据和MapReduce技术相比,Spark有如下优势: 1.运行速度快,Spark拥有DAG执行引擎,支持在内存中对数据进行迭代计算。官方提供的数据表明,如果数据由磁盘读取,速度是Hadoop MapReduce的10倍以上,如果数据从内存中读取,速度可以高达100多倍。 2.适用场景广泛,大数据分析统计,实时数据处理,图计算及机器学习 3.易用性,编写简单,支持80种以上的高级算子,支持多种语言,数据源丰富,可部署在多种集群中 4.容错性高。Spark引进了弹性分布式数据集RDD (Resilient Distributed Dataset) 的抽象,它是分布在一组节点中的只读对象集合,这些集合是弹性的,如果数据集一部分丢失,则可以根据“血统”(即充许基于数据衍生过程)对它们进行重建。另外在RDD计算时可以通过CheckPoint来实现容错,而CheckPoint有两种方式:CheckPoint Data,和Logging The Updates,用户可以控制采用哪种方式来实现容错。 Spark的适用场景主要有以下几个类型: 1.复杂的批量处理(Batch Data Processing),偏重点在于处理海量数据的能力,至于处理速度可忍受,通常的时间可能是在数十分钟到数小时; 2.基于历史数据的交互式查询(Interactive Query),通常的时间在数十秒到数十分钟之间;3.基于实时数据流的数据处理(Streaming Data Processing),通常在数百毫秒到数秒之间。RDD 实质上是一种更为通用的迭代并行计算框架,用户可以显示控制计算的中间结果,然后将其自由运用于之后的计算。 在大数据实际应用开发中存在许多迭代算法,如机器学习、图算法等,和交互式数据挖掘工具。这些应用场景的共同之处是在不同计算阶段之间会重用中间结果,即一个阶段的输出结果会作为下一个阶段的输入。 RDD 正是为了满足这种需求而设计的。虽然 MapReduce 具有自动容错、负载平衡和可拓展性的优点,但是其最大的缺点是采用非循环式的数据流模型,使得在迭代计算时要进行大量的磁盘 I/O 操作。 通过使用 RDD,用户不必担心底层数据的分布式特性,只需要将具体的应用逻辑表达为一系列转换处理,就可以实现管道化,从而避免了中间结果的存储,大大降低了数据复制、磁盘 I/O 和数据序列化的开销。

3、 数据来源描述

1.pyspark交互式编程这次实验采用的数据由老师提供。其中提供分析数据data.txt,该数据集包含了某大学计算机系的成绩,数据格式如下所示:
Tom,DataBase,80
Tom,Algorithm,50
Tom,DataStructure,60
Jim,DataBase,90
Jim,Algorithm,60
Jim,DataStructure,80
……
2.编写独立应用程序实现数据去重对于两个输入文件A和B,编写Spark独立应用程序,对两个文件进行合并,并剔除其中重复的内容,得到一个新文件C。下面是输入文件和输出文件的一个样例,供参考。
输入文件A的样例如下:
20170101 x
20170102 y
20170103 x
20170104 y
20170105 z
20170106 z
输入文件B的样例如下:
20170101 y
20170102 y
20170103 x
20170104 z
20170105 y
根据输入的文件A和B合并得到的输出文件C的样例如下:
20170101 x
20170101 y
20170102 y
20170103 x
20170104 y
20170104 z
20170105 y
20170105 z
20170106 z
3.编写独立应用程序实现求平均值问题给出的计算机课程三门课的成绩(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)

4、 数据上传及上传结果查看

用QQ邮箱或使用ftp上传所需文件,查看文件: 在这里插入图片描述

1、pyspark交互式编程
在这里插入图片描述

图4-1-1 data.txt
2.编写独立应用程序实现数据去重
在这里插入图片描述
在这里插入图片描述

图4-2 A.txt与B.txt
3.编写独立应用程序实现求平均值问题
在这里插入图片描述

图4-3 Algorithm.txt

5、 数据处理过程描述

1.pyspark交互式编程

(1) 该系总共有多少学生;
在这里插入图片描述

(2) 该系共开设了多少门课程;
在这里插入图片描述

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

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

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

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

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

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

(1)假设当前目录为/usr/local/spark/mycode,在当前目录下新建一个avg1.py文件
在这里插入图片描述

(2)最后在目录/usr/local/spark/mycode下执行下面命令执行程序(注意执行程序时请先退出pyspark shell,否则会出现“地址已在使用”的警告);
在这里插入图片描述
在这里插入图片描述

(3)在目录/usr/local/spark/mycode/remdup/result下即可得到结果文件part-00000
在这里插入图片描述

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

(1)假设当前目录为/usr/local/spark/mycode/avgscore,在当前目录下新建一个avgscore.py;
在这里插入图片描述

(2)最后在目录/usr/local/spark/mycode/avgscore下执行下面命令执行程序(注意执行程序时请先退出pyspark shell,否则会出现“地址已在使用”的警告)。
在这里插入图片描述

(3)在目录/usr/local/spark/mycode/avgscore/result下即可得到结果文件part-00000。
在这里插入图片描述

6、 经验总结

这次的RDD编程初级实践大作业基本上是对平时所学知识的回顾,里面的内容可以说是对整个学期的总结和巩固。这次的大作业内容主要回顾了spark的交互式编程编写独立应用程序实现数据去重、编写独立应用程序实现求平均值等问题。希望通过这次的大作业的实践操作能够加深我对于RDD编程的理解。在完成这次大作业的过程中,我也遇到了一些问题,比如说,文件夹中有同名文件导致结果出错,其次就是路径的问题,但是通过不断的纠错也改过来了。在一次次的练习中,我对大数据这门课,对spark及RDD编程等知识都有了更好地理解同时我也更加熟悉Linux系统的基本操作,希望接下来再接再厉,努力学习大数据这门课,为以后的学习和工作打下良好的基础。

标签:编程,应用程序,RDD,初级,Spark,数据,spark
来源: https://blog.csdn.net/weixin_44428549/article/details/118054493

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

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

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

ICode9版权所有