任务4.8.4 利用Spark SQL实现分组排行榜
文章目录
- 1. 任务说明
- 2. 解决思路
- 3. 准备成绩文件
- 4. 采用交互式实现
- 5. 采用Spark项目
- 实战概述:使用Spark SQL实现分组排行榜
- 任务背景
- 任务目标
- 技术选型
- 实现步骤
- 1. 准备数据
- 2. 数据上传至HDFS
- 3. 启动Spark Shell或创建Spark项目
- 4. 读取数据
- 5. 数据转换
- 6. 创建临时视图
- 7. SQL查询实现分组排行榜
- 8. 结果格式化输出
- 9. 运行程序并验证结果
- 代码实现
- 结果展示
- 总结
1. 任务说明

2. 解决思路

3. 准备成绩文件

4. 采用交互式实现

5. 采用Spark项目

实战概述:使用Spark SQL实现分组排行榜
任务背景
在教育数据分析领域,经常需要对学生的成绩进行分组和排名。本实战任务通过Apache Spark的Spark SQL模块,实现对学生成绩数据的分组,并求出每个学生分数最高的前3个成绩。
任务目标
- 处理包含多个学生多条成绩记录的数据集。
- 对每个学生的成绩进行分组,并计算每个学生最高的前3个成绩。
- 以指定的格式输出每个学生的Top3成绩。
技术选型
- 使用Apache Spark作为大数据处理框架。
- 利用Spark SQL进行数据查询和操作。
实现步骤
1. 准备数据
- 创建本地文件
grades.txt,存储学生姓名和对应的成绩。
2. 数据上传至HDFS
- 创建HDFS目录
/topn/input。 - 将
grades.txt上传至HDFS。
3. 启动Spark Shell或创建Spark项目
- 启动Spark Shell或创建Maven项目并配置Spark相关依赖。
4. 读取数据
- 使用Spark读取HDFS上的成绩文件,创建DataFrame。
5. 数据转换
- 将单列DataFrame转换成包含
name和grade的多列DataFrame。
6. 创建临时视图
- 基于DataFrame创建SQL临时视图,以便进行SQL查询。
7. SQL查询实现分组排行榜
- 使用窗口函数
row_number()和over()对每个学生的成绩进行降序排名,并筛选出排名前3的成绩。
8. 结果格式化输出
- 将查询结果转换为元组,然后按学生姓名分组,格式化输出每个学生的Top3成绩。
9. 运行程序并验证结果
- 执行Scala程序,查看输出的Top3成绩是否符合预期。
代码实现
以下是使用Scala编写的Spark程序示例,用于实现分组排行榜功能:
package net.huawei.sqlimport org.apache.spark.sql.{SparkSession, functions}object GradeTopN {def main(args: Array[String]): Unit = {val spark = SparkSession.builder().appName("SparkSQLGradeTopN").master("local[*]").getOrCreate()val df = spark.read.text("hdfs://master:9000/topn/input/grades.txt")val gradeDF = df.selectExpr("split(value, ' ') as (name, grade)").withColumn("grade", functions.expr("cast(grade as int)")).drop("value")gradeDF.createOrReplaceTempView("t_grade")val top3 = spark.sql("""SELECT name, gradeFROM (SELECT name, grade,ROW_NUMBER() OVER (PARTITION BY name ORDER BY grade DESC) as rankFROM t_grade) tWHERE t.rank <= 3""")top3.show()val result = top3.collect.map(row => (row.getString(0), row.getInt(1)))val grouped = result.groupBy(_._1)grouped.foreach { case (name, grades) =>println(s"$name: ${grades.map(_._2).mkString(" ")}")}spark.stop()}
}
结果展示
程序运行后,将输出每个学生的Top3成绩
张三丰: 94 90 87
李孟达: 88 85 82
王晓云: 98 97 93
总结
本实战任务展示了如何使用Spark SQL对数据进行分组和TopN计算,这是大数据领域中常见的数据处理需求。通过Spark SQL的窗口函数,可以方便地实现复杂的数据分析任务。
相关文章:
任务4.8.4 利用Spark SQL实现分组排行榜
文章目录 1. 任务说明2. 解决思路3. 准备成绩文件4. 采用交互式实现5. 采用Spark项目实战概述:使用Spark SQL实现分组排行榜任务背景任务目标技术选型实现步骤1. 准备数据2. 数据上传至HDFS3. 启动Spark Shell或创建Spark项目4. 读取数据5. 数据转换6. 创建临时视图…...
五线谱与简谱有什么区别 五线谱简谱混排怎么打 吉他谱软件哪个好
五线谱与简谱作为音乐记谱领域的两大主流系统,各自承载着深厚的历史渊源与独特的表现力,并在全球范围内被不同程度地接受和应用。尽管两者都是为了记录音乐作品中的音高和节奏信息,但其内在机制、适用范围以及学习曲线存在显著差别。下面我们…...
[C#][opencvsharp]C#使用opencvsharp进行年龄和性别预测支持视频图片检测
使用 OpenCVSharp 来调用 age_net.caffemodel 和 gender_net.caffemodel 来进行性别和年龄预测涉及几个步骤。以下是一个简化的流程和示例文案: 1. 准备工作 确保你已经安装了 OpenCVSharp 和相关的依赖项。确保你有 age_net.prototxt、age_net.caffemodel、gende…...
pdf拆分,pdf拆分在线使用,pdf拆分多个pdf
在数字化的时代,pdf文件已经成为我们日常办公、学习不可或缺的文档格式。然而,有时候我们可能需要对一个大的pdf文件进行拆分,以方便管理和分享。那么,如何将一个pdf文件拆分成多个pdf呢?本文将为你推荐一种好用的拆分…...
VScode Python debug:hydra.run.dir 写入launch.json
记录一个debug时的经验: VS code extension名称版本Pythonv2024.8.1Python Debuggerv2024.6.0 我配置的project运行 train.py 时需要在 terminal 输入参数 hydra.run.dirxxx 我想用 vscode debug 查看内部代码,按以往的经验需要将args写入launch.json&…...
ExVideo: 提升5倍性能-用于视频合成模型的新型后调谐方法
标题:ExVideo: Extending Video Diffusion Models via Parameter-Efficient Post-Tuning作者: Zhongjie Duan; Wenmeng Zhou; Cen Chen; Yaliang Li; Weining QianDOI: 10.48550/arXiv.2406.14130摘要: Recently, advancements in video synthesis have attracted s…...
laravel Dcat Admin 入门应用(三)Grid 之 Column
Dcat Admin 是一个基于 Laravel-admin 二次开发而成的后台构建工具,只需很少的代码即可构建出一个功能完善的高颜值后台系统。支持页面一键生成 CURD 代码,内置丰富的后台常用组件,开箱即用,让开发者告别冗杂的 HTML 代码。 larav…...
掌握Llama 2分词器:填充、提示格式及更多
目录 简介Llama 2分词器基础为分词器设置填充添加特殊标记使用BOS和EOS标记进行分词定义填充标记训练中使用填充标记高级功能:掩码标记Llama的提示格式结论 简介 在语言模型领域,时间变化迅速。自Llama 2发布已经有几个月了,但关于其分词器…...
pdf合并,pdf合并成一个pdf,pdf合并在线网页版
在处理pdf文件的过程中,有时我们需要将多个pdf文件合并成一个pdf文件。作为一名有着丰富计算机应用经验的技术博主,我将为您详细介绍如何将多个pdf文件合并成一个pdf文件。 pdf合并方法:使用, “轻云处理pdf官网” 打开 “轻云处…...
算法基础--------【图论】
图论(待完善) DFS:和回溯差不多 BFS:进while进行层序遍历 定义: 图论(Graph Theory)是研究图及其相关问题的数学理论。图由节点(顶点)和连接这些节点的边组成。图论的研究范围广泛,涉及路径、…...
x86和x64架构的区别及应用
x86和x64架构的区别及应用 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在计算机硬件和软件领域,x86和x64是两种常见的处理器架构。它们在计算能…...
2024年度总结:不可错过的隧道IP网站评估推荐
随着网络技术的飞速发展,隧道IP服务成为了许多企业和个人在进行网络活动时的得力助手。作为专业的测评团队,我们经过一整年的深入研究和测试,为大家带来了三款备受瞩目的隧道IP网站推荐——品易HTTP、极光HTTP和一G代理。接下来,我…...
Linux下VSCode的安装和基本使用
应用场景:嵌入式开发。 基本只需要良好的编辑环境,能支持文件搜索和跳转,就挺OK的。 之所以要在Linux下安装,是因为在WIN11上安装后,搜索功能基本废了,咋弄都弄不好,又不方便重装win系统&#x…...
C# 实现websocket双向通信
🎈个人主页:靓仔很忙i 💻B 站主页:👉B站👈 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:C# 🤝希望本文对您有所裨益,如有不足之处ÿ…...
Spring Boot结合FFmpeg实现视频会议系统视频流处理与优化
在构建高效稳定的视频会议系统时,实时视频流的处理和优化是开发者面临的核心挑战之一。这不仅仅是简单的视频数据传输,更涉及到一系列复杂的技术问题,需要我们深入分析和有效解决。 高并发与实时性要求: 视频会议系统通常需要支持多人同时进行视频通话,这就意味着系统需要…...
扫扫地,搞搞卫生 ≠ 车间5S管理
在制造业的日常运营中,车间管理是一项至关重要的工作,它直接关系到生产效率、产品质量以及员工的工作环境。然而,许多人常常将简单的“扫扫地,搞搞卫生”等同于车间5S管理,这种误解不仅可能导致管理效果不佳࿰…...
ES(笔记)
es就是json请求体代替字符串查询 dsl查询和过滤,一个模糊查询,一个非模糊查询 must,should 做模糊查询的,里面都是match,根据查询内容进行匹配,filter过滤,term词元查询,就是等值查…...
开箱即用的fastposter海报生成器
什么是 fastposter ? fastposter 海报生成器是一款快速开发海报的工具。只需上传一张背景图,在对应的位置放上组件(文字、图片、二维码、头像)即可生成海报。 点击代码直接生成各种语言 SDK 的调用代码,方便快速开发。 软件特性&…...
力扣每日一题 6/28 动态规划/数组
博客主页:誓则盟约系列专栏:IT竞赛 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 2742.给墙壁刷油漆【困难】 题目: 给你两个长度为 n 下标从 0…...
[数据集][目标检测]游泳者溺水检测数据集VOC+YOLO格式8275张4类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):8275 标注数量(xml文件个数):8275 标注数量(txt文件个数):8275 标注…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
