今天完成spark实验4:RDD编程初级实践。

1、spark-shell交互式编程

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

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

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

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

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

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

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

(7)使用累加器计算共有多少人选了 DataBase 这门课

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

(1)假设当前目录为/usr/local/spark/mycode/remdup,在当前目录下新建一个目录 mkdir -p src/main/scala,然后在目录/usr/local/spark/mycode/remdup/src/main/scala 下新建一个 remdup.scala,复制下面代码;

(2)在目录/usr/local/spark/mycode/remdup 目录下新建 simple.sbt,复制下面代码:

(3)在目录/usr/local/spark/mycode/remdup 下执行下面命令打包程序

(4)最后在目录/usr/local/spark/mycode/remdup 下执行下面命令提交程序

 

 (5)在目录/usr/local/spark/mycode/remdup/result 下即可得到结果文件。

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

每个输入文件表示班级学生某个学科的成绩,每行内容由两个字段组成,第一个是学生 名字,第二个是学生的成绩;编写 Spark 独立应用程序求出所有学生的平均成绩,并输出到 一个新文件中。下面是输入文件和输出文件的一个样例,供参考。

Algorithm 成绩:

小明 92

小红 87

小新 82

小丽 90

Database 成绩:

小明 95

小红 81

小新 89

小丽 85

Python 成绩:

小明 82

小红 83

小新 94

小丽 91

平均成绩如下:

(小红,83.67)

(小新,88.33)

(小明,89.67)

(小丽,88.67)

(1)假设当前目录为/usr/local/spark/mycode/avgscore,在当前目录下新建一个目录 mkdir -p src/main/scala,然后在目录/usr/local/spark/mycode/avgscore/src/main/scala 下新建一个 avgscore.scala,复制下面代码;

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import org.apache.spark.HashPartitioner
object AvgScore {
 def main(args: Array[String]) {
   val conf = new SparkConf().setAppName("AvgScore")
   val sc = new SparkContext(conf)
   val dataFile = "file:///home/charles/data"
   val data = sc.textFile(dataFile,3)
   val res = data.filter(_.trim().length>0).map(line=>(line.split(" ")(0).trim(),line.split("
")(1).trim().toInt)).partitionBy(new HashPartitioner(1)).groupByKey().map(x => {
   var n = 0
   var sum = 0.0
   for(i <- x._2){
     sum = sum + i
     n = n +1
   }
   val avg = sum/n
   val format = f"$avg%1.2f".toDouble(x._1,format)
 })
   res.saveAsTextFile("result")
 }
}

(2)在目录/usr/local/spark/mycode/avgscore 目录下新建 simple.sbt,复制下面代码:

  

(3)在目录/usr/local/spark/mycode/avgscore 下执行下面命令打包程序

(4)最后在目录/usr/local/spark/mycode/avgscore 下执行下面命令提交程序

(5)在目录/usr/local/spark/mycode/avgscore/result 下即可得到结果文件。

posted on 2021-01-05 21:32  嘻嘻_嘻  阅读(334)  评论(0编辑  收藏  举报