实验三 RDD编程初级实践

1 实验目的

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

2 实验平台

1、Spark3.4.0 (Scala 版本为 2.12.17)
2、操作系统:Ubuntu16.04
3、Jdk版本:1.8或以上版本。

3 实验要求

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

Algorithm成绩:

小明 92

小红 87

小新 82

小丽 90

Database成绩:

小明 95

小红 81

小新 89

小丽 85

Python成绩:

小明 82

小红 83

小新 94

小丽 91

平均成绩如下:

    (小红,83.67)

    (小新,88.33)

    (小明,89.67)

    (小丽,88.67)

4 实验内容和步骤(操作结果要附图)

假设当前目录为/usr/local/spark/mycode/avgscore,在当前目录下新建一个目录mkdir -p src/main/scala,然后在目录/usr/local/spark/mycode/avgscore/src/main/scala下新建一个avgscore.scala

import org.apache.spark.SparkConf
import org.apache.spark.HashPartitioner
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
object AvgSore {
  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("AvgScore")
    val sc = new SparkContext(conf)
    val dataFile = "file:///home/hadoop/data/Algorithm.txt,file:///home/hadoop/data/Database.txt,file:///home/hadoop/data/Python.txt"
    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 formattedAvg = f"$avg%1.2f".toDouble
    (x._1, formattedAvg)
    })
    res.saveAsTextFile("file:///usr/local/spark/mycode/AvgScore/result")
  }
}
}

在目录/usr/local/spark/mycode/avgscore目录下新建simple.sbt

name := "Simple Project"
version := "1.0"
scalaVersion := "2.12.17"
libraryDependencies += "org.apache.spark" %% "spark-core" % "3.4.0"

进行打包

sudo /usr/local/sbt/sbt package

进行运行

/usr/local/spark/bin/spark-submit --class "AvgScore"  /usr/local/spark/mycode/avgscore/target/scala-2.12/simple-project_2.12-1.0.jar

5 实验总结

  • 总结所学的RDD编程基础知识和实践经验。
  • 强调继续学习和探索更高级的Spark编程概念和技术。
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zbxmc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值