Spark RDD计算总分与平均分

news/2024/11/15 1:31:54/

文章目录

  • 一,提出任务
  • 二,实现思路
  • 三,准备工作
    • 1、启动HDFS服务
    • 2、启动Spark服务
    • 3、在本地创建成绩文件
    • 4、将成绩文件上传到HDFS
  • 四,完成任务
    • 1、在Spark Shell里完成任务
      • (1)读取成绩文件,生成RDD
      • (2)定义二元组成绩列表
      • (3)利用RDD填充二元组成绩列表
      • (4)基于二元组成绩列表创建RDD
      • (5)对rdd按键归约得到rdd1,计算总分
      • (6)将rdd1映射成rdd2,计算总分与平均分
    • 2、在IntelliJ IDEA里完成任务
      • (1)打开RDD项目
      • (2)创建计算总分平均分对象
      • (3)运行程序,查看结果


一,提出任务

针对成绩表,计算每个学生总分和平均分

姓名语文数学英语
张三789076
李四958898
王五788060

二,实现思路

读取成绩文件,生成lines;定义二元组成绩列表;遍历lines,填充二元组成绩列表;基于二元组成绩列表创建RDD;对rdd按键归约得到rdd1,计算总分;将rdd1映射成rdd2,计算总分与平均分。

三,准备工作

1、启动HDFS服务

执行命令:start-dfs.sh
在这里插入图片描述

2、启动Spark服务

执行命令:start-all.sh
在这里插入图片描述

3、在本地创建成绩文件

在/home里创建scores.txt文件
在这里插入图片描述

4、将成绩文件上传到HDFS

在HDFS上创建/scores/input目录,将成绩文件上传至该目录
在这里插入图片描述

四,完成任务

1、在Spark Shell里完成任务

(1)读取成绩文件,生成RDD

执行命令:val lines = sc.textFile("hdfs://master:9000/scores/input/scores.txt")
在这里插入图片描述

(2)定义二元组成绩列表

执行命令:import scala.collection.mutable.ListBuffer
执行命令:val scores = new ListBuffer[(String, Int)]()
在这里插入图片描述

(3)利用RDD填充二元组成绩列表

lines.collect.foreach(line => {                 val fields = line.split(" ")                  scores.append((fields(0), fields(1).toInt))   scores.append((fields(0), fields(2).toInt))   scores.append((fields(0), fields(3).toInt))   
})
scores.foreach(println)       

执行上述代码
在这里插入图片描述

(4)基于二元组成绩列表创建RDD

执行命令:val rdd = sc.makeRDD(scores);
在这里插入图片描述

(5)对rdd按键归约得到rdd1,计算总分

执行命令:val rdd1 = rdd.reduceByKey(_ + _)
在这里插入图片描述

(6)将rdd1映射成rdd2,计算总分与平均分

执行命令:val rdd2 = rdd1.map(score => (score._1, score._2, (score._2 / 3.0).formatted("%.2f")))

在这里插入图片描述

2、在IntelliJ IDEA里完成任务

(1)打开RDD项目

SparkRDDDemo
在这里插入图片描述

(2)创建计算总分平均分对象

在net.army.rdd包里创建day07子包,然后在子包里创建CalculateSumAvg对象
在这里插入图片描述

package net.army.rdd.day07import org.apache.spark.{SparkConf, SparkContext}import scala.collection.mutable.ListBuffer/*** 作者:梁辰兴* 日期:2023/6/6* 功能:统计总分与平均分*/
object CalculateSumAvg {def main(args: Array[String]): Unit = {// 创建Spark配置对象val conf = new SparkConf().setAppName("CalculateSumAvg ") // 设置应用名称.setMaster("local[*]") // 设置主节点位置(本地调试)// 基于Spark配置对象创建Spark容器val sc = new SparkContext(conf)// 读取成绩文件,生成RDDval lines = sc.textFile("hdfs://master:9000/scores/input/scores.txt")// 定义二元组成绩列表val scores = new ListBuffer[(String, Int)]()// 利用RDD填充二元组成绩列表lines.collect.foreach(line => {val fields = line.split(" ")scores.append((fields(0), fields(1).toInt))scores.append((fields(0), fields(2).toInt))scores.append((fields(0), fields(3).toInt))})// 基于二元组成绩列表创建RDDval rdd = sc.makeRDD(scores);// 对rdd按键归约得到rdd1,计算总分val rdd1 = rdd.reduceByKey(_ + _)// 将rdd1映射成rdd2,计算总分与平均分val rdd2 = rdd1.map(score => (score._1, score._2, (score._2 / 3.0).formatted("%.2f")))// 在控制台输出rdd2的内容rdd2.collect.foreach(println)// 将rdd2内容保存到HDFS指定位置rdd2.saveAsTextFile("hdfs://master:9000/scores/output")// 关闭Spark容器sc.stop()}
}

(3)运行程序,查看结果

运行程序CalculateSumAvg,控制台结果

在这里插入图片描述
查看HDFS的结果文件
在这里插入图片描述


http://www.ppmy.cn/news/240209.html

相关文章

华为mate8电池虚电校正_vivo手机虚电量如何进行电池校正

在我们使用的智能手机中,电池是一个非常重要的手机部件,如果在使用手机的过程中没有正确的给手机充电,或者让手机电池受到损害的话,手机的电池就会出现虚电量这样的情况,很多用户面对手机虚电量都是束手无策的&#xf…

擦地机器人排行榜_扫地机排名 扫地机器人排行榜

展开全部 在万千型号不一的扫地机器人中能够脱颖而出的产品,一定是32313133353236313431303231363533e78988e69d8331333433633437综合配置和使用体验都很出色的明星机型。今天就一起了解这款优质产品——斐纳TOMEFON智能扫地机器人。对于一台适用于家庭地面清洁的高…

tws蓝牙耳机哪个牌子好?2022蓝牙耳机排行榜

一、南卡lite pro2蓝牙耳机 NANK南卡的出品工艺以及理念一直是行业中的领头羊,不管是性能还是质量上,都是受到一致的好评,而南卡Lite pro2蓝牙耳机更是匠心级别的制造工艺!花几百元的价格配置了其千元蓝牙耳机才配置的高通3040蓝牙…

纽扣电池十大品牌

纽扣电池十大品牌 随着消费类电子产品种类的越来越多,外型越来越小,纽扣电池的使用也变得日益广泛。厂家在寻找供应商,顾客在挑选纽扣电池品牌时,面临着越来越多的选择,而纽扣电池因为其工业配套为主,商业…

全球与中国电池级羧甲基纤维素钠(CMC)市场现状及未来发展趋势2022-2028

根据QYR(恒州博智)的统计及预测,2021年全球电池级羧甲基纤维素钠(CMC)市场销售额达到了 亿美元,预计2028年将达到 亿美元,年复合增长率(CAGR)为 %(2022-2028&…

y7000电池固件_联想 拯救者Y7000P 怎么拿出电池?

电脑能力主要看处理器和显卡。 办公用途,平面设计类吃处理器的能力。 游戏,3d设计类吃显卡能力。 不管那种需求,内存容量都是需要有合理的选择(类如看机器是否支持扩展)。 不管台式本子都一样。 本子的能力和选择问题下面说法参考。 &#xf…

Android自定义电池控件

一、背景 最近公司有个业务,需要自定义一个电池控件,因此自己按照UI图编写了一个自定义View。 二、效果 三、实现过程 首先看下视觉给出的UI效果图 从这里我们可以看得出来,要自定义这个电池View的话,分为3部分来绘制。 第一…

电池详情获取应用运行时间

1. 电池用量时间一直为0 2. 源码跟踪 2.1 字符串位置 <string name"battery_detail_foreground" msgid"3350401514602032183">"在前台运行时"</string><string name"battery_detail_background" msgid"192964439…