RDD编程实验

RDD编程初级实践

基于《Spark编程基础(Scala版)》



前言

前面已经基于docker搭建好spark集群,集群为一台master和两台slave,主机为windows系统,集群搭建在linux下。


一、实验目的

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

二、实验内容和要求

1.spark-shell交互式编程
2.编写独立应用程序实现数据去重
3.编写独立应用程序实现求平均值问题

三、实验步骤

1.spark-shell交互式编程

数据集包含了某大学计算机系的成绩,数据格式如下所示:

Tom,DataBase,80
Tom,Algorithm,50
Tom,DataStructure,60
Jim,DataBase,90
Jim,Algorithm,60
Jim,DataStructure,80

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

(1)该系总共有多少学生;

登陆spark并打开spark-shell:

./bin/spark-shell

执行以下代码:

val lines=sc.textFile("/test/Data1.txt")//打开文件
val par=lines.map(row=>row.split(",")(0))//切分取第一数值
val distinct_par=par.distinct()//去重
distinct_par.count//输出

输出结果如下:
在这里插入图片描述
答:该系总共有265名学生。

(2)该系共开设了多少门课程;

执行如下代码:

val par=rdd.map( row=>row.split(",")(0))
var count=par.distinct()
println("学生总人数:"+count.count())

结果如下:

在这里插入图片描述
答:该系共开设了8门课程。

(3)Tom同学的总成绩平均分是多少;

执行如下代码:

val Tom=input.filter(t => t.split(",")(0) == "Tom")//找到tom
val Tom_1=Tom.map(t => (t.split(",")(0), (t.split(",")(2).toInt,1)))//构造一种数据结构(Tom,(成绩,1)),这样的话我们就可以得到Tom的总课程成绩以及总课程门数
val Tom_2=Tom_1.reduceByKey((a,b)=>(a._1+b._1,a._2+b._2))//将上面得到的(成绩,1)全部加起来
Tom_2.mapValues(a=>a._1/a._2).first()//将总成绩除以总课程数

结果如下:

在这里插入图片描述
答:平局分是30。

(4)求每名同学的选修的课程门数;

代码如下:

scala> input.map(t=>(t.split(",")(0), (t.split(",")(1),1))).reduceByKey((a,b)=>(a._1,a._2+b._2)).mapValues(a=>a._2).foreach(println)
(Bartholomew,5)

结果如下:
在这里插入图片描述

(5)该系DataBase课程共有多少人选修;

代码:

scala> input.filter(t => t.split(",")(1)=="DataBase").count()

结果如下:

在这里插入图片描述
答:共有126人选修。

(6)各门课程的平均分是多少;

代码如下:

input.map(t=>(t.split(",")(1), (t.split(",")(2).toInt,1))).reduceByKey((a,b)=>(a._1+b._1,a._2+b._2)).mapValues(a=>a._1/a
  • 6
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值