Spark综合大作业:RDD编程初级实践

这篇博客介绍了使用Spark进行RDD编程的实验,包括pyspark交互式编程,数据去重和计算平均值的问题。实验中涉及到了学生成绩分析,如学生人数、课程数量、平均分计算等。同时,博主分享了如何编写独立应用程序处理数据去重,以及计算多个文件中学生的平均成绩。最后,博主总结了通过实验学习到的Spark RDD操作和解决问题的方法。
摘要由CSDN通过智能技术生成

Spark综合大作业:RDD编程初级实践
实验配置:操作系统:Ubuntu16.04 | 环境:Spark版本:2.4.0 | 软件:Python版本:3.4.3。


一、实验目的

(1)熟悉Spark的RDD基本操作及键值对操作;
(2)熟悉使用RDD编程解决实际具体问题的方法。

二、实验平台

本次大作业的实验是操作系统:Ubuntu16.04,Spark版本:2.4.0,Python版本:3.4.3。

三、实验内容和要求

1、pyspark交互式编程

本作业提供分析数据data.txt,该数据集包含了某大学计算机系的成绩,数据格式如下所示:
Tom,DataBase,80
Tom,Algorithm,50
Tom,DataStructure,60
Jim,DataBase,90
Jim,Algorithm,60
Jim,DataStructure,80
……
请根据给定的实验数据,在pyspark中通过编程来计算以下内容:
(1)该系总共有多少学生;
(2)该系共开设了多少门课程;
(3)Tom同学的总成绩平均分是多少;
(4)求每名同学的选修的课程门数;
(5)该系DataBase课程共有多少人选修;
(6)各门课程的平均分是多少;
(7)使用累加器计算共有多少人选了DataBase这门课。

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

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

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

每个输入文件表示班级学生某个学科的成绩,每行内容由两个字段组成,第一个是学生名字,第二个是学生的成绩;编写Spark独立应用程序求出所有学生的平均成绩,并输出到一个新文件中。本文给出门课的成绩(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)

四、环境介绍

Spark是云计算大数据的集大成者,是Hadoop的取代者,是第二代云计算大数据技术。它作为一个基于内存计算的云计算大数据平台,在实时流处理、交互式查询、机器学习、图处理、数据统计分析等方面具有无可比拟的优势;Spark 能够比Hadoop快100倍以上;Spark采用一个统一 的堆栈解决了云计算大数据的所有核心问题,这直接奠定了其一统云计算大数据领域的霸主地位。
PySpark 是 Spark 为 Python 开发者提供的 API。
RDD: 弹性分布式数据集分布在不同的集群节点的内存中,可以理解为一大数组,数组的每一个元素就是RDD的一个分区,一个RDD可以分布并被运算在多态计算机节点的内存以及硬盘中,RDD数据块可以放在磁盘上也可以放在内存中(取决于你的设置),如果出现缓冲失效或丢失,RDD分区可以重新计算刷新,RDD是不能被修改的但是可以通过API被变换生成新的RDD。有俩类对RDD的操作(也成算子):
1.变换(懒执行): 有 map flatMap groupByKey reduceByKey 等;
他们只是将一些指令集而不会马上执行,需要有操作的时候才会真正计算出结果;
2.操作(立即执行): 有 count take collect 等;
他们会返回结果,或者把RDD数据输出,这些操作实现了MapReduce的基本函数map,reduce及计算模型,还提供了filter,join,groupBYKey等,另外spark sql 可以用来操作有数据结构的RDD即SPARK DATA FRAME,它的运行原理和mapreduce是一样的,只是他们的运行方式不同,mr的运算是内存磁盘交互读写,不能在内存中共享数据,而RDD可以被共享和持久化.因为大数据运算经常是交互式和迭代式的,所以数据的重用性很重要,而mr的磁盘交互读写带来的I/O开销导致数度减慢。

五、实验步骤

(一)spark的安装
1、安装spark
(1)解压安装包,更改使用用户名hadoop并修改权限

sudo tar -zxf ~/下载/spark-2.0.2-bin-without-hadoop.tgz -C /usr/local/
cd /usr/local
sudo mv ./spark-2.1.0-bin-without-hadoop/ ./spark
sudo chown -R hadoop:hadoop ./spark     

(2)安装后,还需要修改Spark的配置文件spark-env.sh

cd /usr/local/spark
cp ./conf/spark-env.sh.template ./conf/spark-env.sh

编辑spark-env.sh文件(vim ./conf/spark-env.sh),在第一行添加以下配置信息:
在这里插入图片描述

(3)启动spark-shell后,就会进入“scala>”命令提示符状态,如下图所示:
在这里插入图片描述

2、Java独立应用程序编程
(1)安装maven
选择安装在/usr/local/maven中:

图3
图4

2.Java应用程序代码
在终端执行如下命令创建一个文件夹sparkapp2作为应用程序根目录

图5

在 ./sparkapp2/src/main/java 下建立一个名为 SimpleApp.java 的文件(vim ./sparkapp2/src/main/java/SimpleApp.java),添加代码如下:

/*** SimpleApp.java ***/
    import org.apache.spark.api.java.*;
    import org.apache.spark.api.java.function.Function;
 
    public class SimpleApp {
   
        public static void main(String[] args) {
   
            String logFile = "file:///usr/local/spark/README.md"; // Should be some file on your system
            JavaSparkContext sc = new JavaSparkContext("local", "Simple App",
                "file:///usr/local/spark/", new String[]{
   "target/simple-project-1.0.jar"});
            JavaRDD<String> logData = sc.textFile(logFile).cache();
 
            long numAs = logData.filter(new Function<String, Boolean>() {
   
                public Boolean call(String s) {
    return s.contains("a"); }
            
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值