当前位置:   article > 正文

RDD编程实验_rdd编程中计算班级人数

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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

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

登陆spark并打开spark-shell:

./bin/spark-shell
  • 1

执行以下代码:

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

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

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

执行如下代码:

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

结果如下:

在这里插入图片描述
答:该系共开设了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()//将总成绩除以总课程数

  • 1
  • 2
  • 3
  • 4
  • 5

结果如下:

在这里插入图片描述
答:平局分是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)
  • 1
  • 2

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

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

代码:

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

结果如下:

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

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

代码如下:

input.map(t=>(t
    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/466649
    推荐阅读
    相关标签
      

    闽ICP备14008679号