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

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上传所需文件,查看文件: 大数据技术——RDD编程初级实践

1、pyspark交互式编程
大数据技术——RDD编程初级实践

图4-1-1 data.txt
2.编写独立应用程序实现数据去重
大数据技术——RDD编程初级实践
大数据技术——RDD编程初级实践

图4-2 A.txt与B.txt
3.编写独立应用程序实现求平均值问题
大数据技术——RDD编程初级实践

图4-3 Algorithm.txt

5、 数据处理过程描述

1.pyspark交互式编程

(1) 该系总共有多少学生;
大数据技术——RDD编程初级实践

(2) 该系共开设了多少门课程;
大数据技术——RDD编程初级实践

(3) Tom同学的总成绩平均分是多少;
大数据技术——RDD编程初级实践
大数据技术——RDD编程初级实践

(4) 求每名同学的选修的课程门数;
大数据技术——RDD编程初级实践

(5) 该系DataBase课程共有多少人选修;
大数据技术——RDD编程初级实践

(6) 各门课程的平均分是多少;
大数据技术——RDD编程初级实践

(7) 使用累加器计算共有多少人选了DataBase这门课。
大数据技术——RDD编程初级实践

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

(1)假设当前目录为/usr/local/spark/mycode,在当前目录下新建一个avg1.py文件
大数据技术——RDD编程初级实践

(2)最后在目录/usr/local/spark/mycode下执行下面命令执行程序(注意执行程序时请先退出pyspark shell,否则会出现“地址已在使用”的警告);
大数据技术——RDD编程初级实践
大数据技术——RDD编程初级实践

(3)在目录/usr/local/spark/mycode/remdup/result下即可得到结果文件part-00000
大数据技术——RDD编程初级实践

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

(1)假设当前目录为/usr/local/spark/mycode/avgscore,在当前目录下新建一个avgscore.py;
大数据技术——RDD编程初级实践

(2)最后在目录/usr/local/spark/mycode/avgscore下执行下面命令执行程序(注意执行程序时请先退出pyspark shell,否则会出现“地址已在使用”的警告)。
大数据技术——RDD编程初级实践

(3)在目录/usr/local/spark/mycode/avgscore/result下即可得到结果文件part-00000。
大数据技术——RDD编程初级实践

6、 经验总结

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

上一篇:网站用户行为分析项目之会话切割(四)=> 代码重构


下一篇:Spark学习(一)RDD理解与操作