任务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 标注…...
Prompt Optimizer
链接:https://pan.quark.cn/s/3d42e4512934Prompt Optimizer v2.2.1是一款开源AI提示词优化工具,致力于通过智能算法提升提示词质量,支持多模型集成和图像生成功能。它提供桌面应用、Docker部署等多种方式,帮助用户快速获得精准的…...
流注放电,COMSOL放电仿真,等离子体仿真,棒板电极,空气流注,流注放电,需要拿去参考
流注放电,COMSOL放电仿真,等离子体仿真,棒板电极,空气流注,流注放电,需要拿去参考。流注放电这玩意儿在高压设备里常见得跟小区门口的便利店似的。实验室里整了个棒板电极结构,空气里突然窜出条…...
百川2-13B模型安全测试:OpenClaw在防御恶意指令方面的表现
百川2-13B模型安全测试:OpenClaw在防御恶意指令方面的表现 1. 为什么需要测试AI助手的安全性 去年我在本地部署了一个自动化助手,本想让它帮我整理文档和收发邮件。结果有次不小心让它执行了一个包含rm -rf的命令,差点把工作目录清空。这次…...
HuTool代理请求遇阻:深入解析HTTP/1.1 407 Proxy Authentication Required的成因与实战解决方案
1. 当HuTool遇上407:代理认证失败的典型场景 最近在项目中使用HuTool发送HTTPS请求时,突然遇到一个让人头疼的错误——HTTP/1.1 407 Proxy Authentication Required。这个错误就像高速公路上的收费站,明明已经交了通行费(设置了代…...
便携激光云高仪:精确测量云底高度、云层厚度等关键参数
便携激光云高仪是一种用于测量云层高度、厚度及分布情况的气象观测设备,广泛应用于气象监测、航空安全、环境研究等领域。其便携式设计特别适合野外作业和临时观测需求。设备通过激光脉冲探测云底高度,并实时分析云层垂直结构,为气象预报、灾…...
极速上手:Puppeteer + 原生代理IP 突破无头检测(金融与突发新闻抓取 Cheat Sheet)
在金融量化分析、宏观经济数据追踪或突发新闻监控等场景中,数据价值随时间呈指数级衰减。高频并发抓取极易触发目标网站的反爬策略(如 Cloudflare 盾、无头浏览器指纹识别)以及严苛的 IP 封禁。 终极解法: 使用 puppeteer-extra-…...
OpenHarmony软总线实战:手把手教你实现Wi-Fi/BLE双模设备发现(附避坑指南)
OpenHarmony软总线深度实战:Wi-Fi/BLE双模设备发现的工程化实现与性能调优 在智能家居设备爆发式增长的今天,多模连接已成为终端设备的标配能力。作为OpenHarmony分布式能力的核心支撑,软总线(SoftBus)的混合发现机制直…...
从KITTI到TUM:利用evo工具链实现轨迹真值的格式转换与可视化分析
1. 理解KITTI与TUM轨迹格式的本质差异 第一次接触SLAM评估时,我被各种轨迹格式搞得头晕眼花。KITTI和TUM这两种最常见的格式,就像两个说着不同方言的技术专家。KITTI格式简单粗暴,直接记录12个数字代表相机的位姿变换矩阵(去掉最后…...
RevokeMsgPatcher 2.1 终极指南:Windows平台微信QQ消息防撤回实战解决方案
RevokeMsgPatcher 2.1 终极指南:Windows平台微信QQ消息防撤回实战解决方案 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址:…...
手把手教你用MP2144搭建超低功耗单键开关机电路(含单片机代码)
超低功耗单键开关机电路设计与实现指南 在电池供电的嵌入式设备中,电源管理往往是决定产品续航能力的关键因素。想象一下,当你精心设计的智能手表因为待机功耗过高而需要频繁充电,或者户外传感器因为电源管理不当而提前耗尽电量——这些场景凸…...
