Spark大数据处理学习笔记(3.8.1) Spark RDD典型案例-利用RDD计算总分与平均分

news2024/12/26 10:41:46

该文章主要为完成实训任务,详细实现过程及结果见【http://t.csdn.cn/Twpwe】

文章目录

  • 1. 任务目标
  • 2. 实现思路
  • 3. 准备工作
    • 3.1 启动HDFS服务
    • 3.2 启动Spark服务
    • 3.3 在本地创建成绩文件
    • 3.4 将成绩文件上传到HDFS
  • 4. 完成任务
    • 4.1 在Spark Shell里完成任务
      • 4.1.1 读取成绩文件,生成RDD
      • 4.1.2 定义二元组成绩列表
      • 4.1.3 利用RDD填充二元组成绩列表
      • 4.1.4 基于二元组成绩列表创建RDD
      • 4.1.5 对rdd按键归约得到rdd1,计算总分
      • 4.1.6 将rdd1映射成rdd2,计算总分与平均分
    • 4.2 在IntelliJ IDEA里完成任务
      • 4.2.1 打开RDD项目
      • 4.2.2 创建计算总分平均分对象
      • 4.2.3 运行程序,查看结果


1. 任务目标

  • 针对成绩表,计算每个学生总分和平均分
    在这里插入图片描述

2. 实现思路

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

3. 准备工作

3.1 启动HDFS服务

  • 执行命令:start-dfs.sh

3.2 启动Spark服务

  • 执行命令:start-all.sh

3.3 在本地创建成绩文件

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

3.4 将成绩文件上传到HDFS

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

4. 完成任务

4.1 在Spark Shell里完成任务

4.1.1 读取成绩文件,生成RDD

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

4.1.2 定义二元组成绩列表

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

4.1.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.1.4 基于二元组成绩列表创建RDD

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

4.1.5 对rdd按键归约得到rdd1,计算总分

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

4.1.6 将rdd1映射成rdd2,计算总分与平均分

  • 执行命令:val rdd2 = rdd1.map(score => (score._1, score._2, (score._2 / 3.0).formatted("%.2f")))
    在这里插入图片描述

4.2 在IntelliJ IDEA里完成任务

4.2.1 打开RDD项目

  • SparkRDDDemo
    在这里插入图片描述

4.2.2 创建计算总分平均分对象

  • cn.kox.rdd包里创建day07子包,然后在子包里创建CalculateSumAvg对象
    在这里插入图片描述
package cn.kox.rdd.day07

import org.apache.spark.{SparkConf, SparkContext}

import scala.collection.mutable.ListBuffer

/**
 * @ClassName: CalculateSumAvg
 * @Author: Kox
 * @Data: 2023/6/15
 * @Sketch:
 */
object CalculateSumAvg {
  def main(args: Array[String]): Unit = {
    // 创建Spark配置对象
    val conf = new SparkConf()
      .setAppName("CalculateSumAvg ") // 设置应用名称
      .setMaster("local[*]") // 设置主节点位置(本地调试)
    // 基于Spark配置对象创建Spark容器
    val sc = new SparkContext(conf)
    // 读取成绩文件,生成RDD
    val lines = sc.textFile("hdfs://master:9000/scoresumavg/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))
    })
    // 基于二元组成绩列表创建RDD
    val 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/scoresumavg/output")
    // 关闭Spark容器
    sc.stop()
  }
}

4.2.3 运行程序,查看结果

  • 运行程序CalculateSumAvg,控制台结果
    在这里插入图片描述
  • 查看HDFS的结果文件
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/650605.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

虚拟机使用

文章目录 VMWare安装Warning 系统安装MacOS解锁工具Unlocker Warning VMWare配置系统启动安装VMware tools联网 VMWare安装 Warning 安装完VMWare后要在BIOS中开启intel VT(虚拟化),否则安装过程中会出错,提示“Intel VT-x处于禁…

写在2023年,回看10年前,很幸运进了软件测试这行~

首先介绍一下我自己,从事软件测试行业到现在是10年时间,毕业之后一直从事的软件测试行业。很幸运在毕业时赶上互联网这波浪潮,然后就一直在互联网公司工作,虽然那时候的软件测试技术发展还相对比较混乱,但自己因为公司…

CAN 报文字节排列顺序(Intel、Motorola_LSB、Motorola_MSB)

学习自记: 在定义CAN通信矩阵或制作dbc时,我们需要知道报文的字节排列顺序。字节的排列顺序有2种,一种是Intel的排列顺序,另一种是Motorola的排列顺序,就跟大小端字节排序是一样的。下面笔者将简单介绍这2种字节排序的…

在conda环境中安装tensorflow和cuda

​ 不同版本的tensorflow官方提供的编译好的whl文件只对应一个cuda版本,这让需要tensorflow的不同版本时很麻烦。 我选择的方式是在conda中新建一个环境,在环境中安装需要的tensorflow和cudatoolkit。 这里假设已经安装好anaconda。 确定需要的tensorflo…

服了呀,现在的00后,真的是卷死了,辞职信已经写好准备提交了·····

都说00后躺平了,但是有一说一,该卷的还是卷。这不,四月份春招我们公司来了个00后,工作没两年,跳槽到我们公司起薪22K,都快接近我了。 后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了…

数智赋能与低代码:是医药行业的创新引擎还是心魔歧途

医药行业在当下科技水平的推动下实现了突破性的进展,提高了疾病的治疗效果、加速了新药的开发速度,并为病患提供了更便捷、个性化的医疗服务。当前科技水平下的医药行业正在经历快速的发展和创新。AI 在医药研发、诊断和治疗方面扮演着重要角色。机器学习…

软件测试中的可用性、可维护性、可靠性有什么区别?

我们生活在一个用户依赖于对服务的一致访问的可靠性时代。在相互竞争的服务之间进行选择时,对用户来说,没有比可靠性更重要的特性了。但是可靠性是什么意思呢? 为了回答这个问题,我们将根据可靠性工程中的其他度量来分解可靠性&a…

接口自动化测试的一种方案

前言 去年,我们进行了项目的拆分,拆分后的各个子系统也都逐步的改成了通过接口进行数据的交换,接口测试也被提上日程。经过一段时间的探索,接口自动化测试方案越来越完善,今天给大家做个详细的讲解。 方案 目前我们…

5分钟快速学会App自动化测试xpath定位【快点收藏吧】

今天我们先来和大家说一下appium,首先教大家如何定位xpath,五分钟即可学会: 例: 现在我想定位下面这个登录按钮:​ ​xpath该怎么写呢? 先不管三七二十几,先写//,然后找你要定位元…

中国信通院携手合合信息开启《文档图像篡改检测标准》制定工作

文档图像是信息的重要载体,却经常被不法分子利用软件、算法进行篡改。这些虚假材料往往被用于散播谣言、经济诈骗、编造虚假新闻,给个人、社会造成了恶劣的影响。AIGC全球爆火后,人们对“生成式造假”风险的攀升倍感忧虑,图像内容…

获得忠实铁粉?你也可以

获得忠实铁粉?你也可以 何为铁粉铁粉与普通粉丝区别铁粉规则如何获得铁粉 何为铁粉 在CSDN中,铁粉通常指对某个知名开发者、博主或组织非常支持、崇拜、追随的粉丝。他们可能会关注该开发者或博主的所有文章、博客、视频等,积极参与讨论并分…

如何在国产OpenEuler操作系统上安装ONLYOFFICE桌面编辑器V7.4版本

如何在国产OpenEuler操作系统上安装ONLYOFFICE桌面编辑器V7.4版本 书接上文: 手把手教你如何解开安装UKUI的黑屏故障 不吵嘴仗,华为的OpenEuler开放欧拉操作系统也是一款不可多得的非常好的Linux发行版,只是, 初装的桌面环境&a…

选对预测性维护工具,让设备运行更稳定

随着技术的不断进步,预测性维护(Predictive Maintenance,简称PdM)在现代工业中扮演着至关重要的角色。选择适合自身需求的预测性维护工具是企业在实施PM策略时的重要决策。本文将探讨在选择预测性维护工具时需要考虑的关键因素和决…

LeetCode36 有效的数独

请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图) …

不愧是字节出来的,太强了...

前段时间公司缺人,也面了许多测试,当然也没指望能来大牛,薪资提供在15K~20k左右,来面试的人有很多,但是平均水平真的让人很失望。 看了简历很多上面都是写有4/5年工作经验,但在面试中,我大为震…

AI智能时代的专有云|百度智能云ABC Stack亮相2023 NAVIGATE 领航者峰会

近日,百度智能云ABC Stack亮相由紫光集团和新华三集团主办的“2023 NAVIGATE 领航者峰会”互联网线上专题论坛。百度智能云私有云部副总经理史磊进行了主题为“百度智能云携手新华三共创互联网新时代”的演讲,分享了百度专有云ABC Stack智算版的技术优势…

Mac环境python + selenium 环境搭建

文章主要讲解Mac环境下如何搭建selenium环境。作者也是测试初学者,对selenium目前是一无所知的状态,希望从搭建环境开始对它逐步了解。 环境准备 本文采用的环境:• Python 3.7.3 PS: Mac环境会默认自带Python环境,但…

chatgpt赋能python:Python如何使用爬虫技术进行网页操作和SEO优化

Python如何使用爬虫技术进行网页操作和SEO优化 随着互联网的快速发展,越来越多的企业开始意识到网站的SEO优化的重要性。在这个过程中,Python作为一种高效的编程语言,在网页操作和SEO优化方面也扮演着举足轻重的角色。本篇文章将简要介绍Pyt…

LuaJIT Bytecode结构布局

一、Bytecode的存储结构 LuaJIT的Bytecode位宽为32位,在parse阶段用结构体BCInsLine表示,ins表示32位长的字字节码指令,line表示字节码的行号: typedef struct BCInsLine {BCIns ins; /* Bytecode instruction. */BC…

React性能优化API

一、常见性能优化API shouldComponentUpdate:通过重写该函数实现组件的条件渲染,即只有在组件的 props 或 state 发生变化时才重新渲染组件。 PureComponent:React 自带的一个纯组件,其 shouldComponentUpdate 函数已经被自动实现…