任务4.8.4 利用Spark SQL实现分组排行榜

news2024/11/24 9:51:04

文章目录

  • 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转换成包含namegrade的多列DataFrame。

6. 创建临时视图

  • 基于DataFrame创建SQL临时视图,以便进行SQL查询。

7. SQL查询实现分组排行榜

  • 使用窗口函数row_number()over()对每个学生的成绩进行降序排名,并筛选出排名前3的成绩。

8. 结果格式化输出

  • 将查询结果转换为元组,然后按学生姓名分组,格式化输出每个学生的Top3成绩。

9. 运行程序并验证结果

  • 执行Scala程序,查看输出的Top3成绩是否符合预期。

代码实现

以下是使用Scala编写的Spark程序示例,用于实现分组排行榜功能:

package net.huawei.sql

import 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, grade
        FROM (
          SELECT name, grade,
          ROW_NUMBER() OVER (PARTITION BY name ORDER BY grade DESC) as rank
          FROM t_grade
        ) t
        WHERE 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的窗口函数,可以方便地实现复杂的数据分析任务。

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

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

相关文章

CISCN--西南半决赛--pwn

1.vuln 这是主函数&#xff0c;数一下就发现可以溢出最后的0x4008d0 然后会执行到这里&#xff0c;逻辑就是在v0上写shellcode&#xff0c;不过执行写0x10&#xff0c;不够sh&#xff0c;很明显要先read。 以下是exp: from pwn import * context.archamd64 ioprocess(./vuln)…

VRRP简介

定义 虚拟路由冗余协议VRRP&#xff08;Virtual Router Redundancy Protocol&#xff09;通过把几台路由设备联合组成一台虚拟的路由设备&#xff0c;将虚拟路由设备的IP地址作为用户的默认网关实现与外部网络通信。当网关设备发生故障时&#xff0c;VRRP机制能够选举新的网关…

G8 - ACGAN

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目录 模型结构 模型结构 之前几期打卡中&#xff0c;已经介绍过GAN CGAN SGAN&#xff0c;而ACGAN属于上述几种GAN的缝合怪&#xff0c;其模型的结构图如下&a…

GoLang语言

基础 安装Go扩展 go build 在项目目录下执行go build go run 像执行脚本文件一样执行Go代码 go install go install分为两步&#xff1a; 1、 先编译得到一个可执行文件 2、将可执行文件拷贝到GOPATH/bin Go 命令 go build :编译Go程序 go build -o "xx.exe"…

渗透测试入门教程(非常详细),从零基础入门到精通,看完这一篇就够了

什么是渗透测试 渗透测试就是模拟真实黑客的攻击手法对目标网站或主机进行全面的安全评估&#xff0c;与黑客攻击不一样的是&#xff0c;渗透测试的目的是尽可能多地发现安全漏洞&#xff0c;而真实黑客攻击只要发现一处入侵点即可以进入目标系统。 一名优秀的渗透测试工程师…

vue 代理

一、常用的发送一个ajax请求&#xff1a; 1、xhr new XMLHttpRequest(),真正开发中不常用 2、jq&#xff0c;jq主要功能是获取dom&#xff0c;周边才是请求接口 3、axios&#xff08;大名鼎鼎的&#xff09; axios.get("url").then(response>{},error>{} )4、…

一篇文章教会你【elementUI搭建使用】

Element&#xff0c;一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组 件库. 安装 ElementUI npm i element-ui -S 在 main.js 中写入以下内容&#xff1a; import ElementUI from element-ui; import element-ui/lib/theme-chalk/index.css; Vue.use(Eleme…

Nginx网站服务详解(设置并发数、实现不同虚拟主机等)

一、nginx的最大并发数设置已经状态收集模块 [root192 nginx]# cat nginx.conf # For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/user ngin…

【pytorch11】高阶操作

高阶操作 WhereGather where 三个参数&#xff0c;第一个是condition&#xff0c;第二个参数是源头A&#xff0c;第三个参数是源头B&#xff0c;也就是说有两项数据A和B&#xff0c;C有可能来自于A也有可能来自于B&#xff0c;如果全部来自于A的话直接赋值给A&#xff0c;如果…

AI写作助力:如何用AI降重工具快速提升论文原创性?

高查重率是许多毕业生的困扰。通常&#xff0c;高查重率源于过度引用未经修改的参考资料和格式错误。传统的降重方法&#xff0c;如修改文本和增添原创内容&#xff0c;虽必要但耗时且成效不一。 鉴于此&#xff0c;应用AI工具进行AIGC降重成为了一个高效的解决方案。这些工具…

戴尔md3400存储控制器脱机故障 电池故障处理

看了一下网上关于DELL MD系列存储故障处理的文档还是比较少的&#xff0c;最近处理了一些关于MD系列存储的问题&#xff0c;稍微整理整理就分享一下&#xff0c;各位喜欢摸索的朋友可以稍稍做些参考&#xff0c;当然如果想寻求外援的也可以快速的找到合适的人。以便安全又快捷的…

事务的特性-原子性(Atomicity)、一致性(Consistency)、隔离性(Asolation)、持久性(Durability)

一、引言 1、数据库管理系统DBMS为保证定义的事务是一个逻辑工作单元&#xff0c;达到引入事务的目的&#xff0c;实现的事务机制要保证事务具有原子性、一致性、隔离性和持久性&#xff0c;事务的这四个特性也统称为事务的ACID特性 2、当事务保持了ACID特性&#xff0c;才能…

98、验证二叉搜索树

给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 题解&#xff1a;若要验证是…

找不到xinput1_3.dll怎么办,实测有效的几种方法分享

在日的使用电脑过程中&#xff0c;我们经常会遇到各种各样的问题。其中之一就是找不到xinput1_3.dll文件。这个问题可能会影响到我们的游戏体验&#xff0c;甚至导致电脑无法正常运行。那么&#xff0c;又该如何解决这个问题呢&#xff1f;小编将全面解析找不到xinput1_3.dll对…

操作系统之《处理器机调度算法》【知识点+详细解题过程】

目录 PS:处理机调度算法相关公式&#xff1a; 1、【FCFS】先来先服务调度算法 2、【SJF&#xff08;SPF&#xff09;】短作业&#xff08;进程&#xff09;优先调度算法 3、【HRRF】最高响应比优先算法 4、【SRTF】最短剩余时间优先调度算法&#xff08;抢占式&am…

第二十课,认识列表与定义列表

一&#xff0c;列表的作用 思考一个问题&#xff1a;如果我想要在程序中&#xff0c;记录5名学生的信息&#xff0c;如姓名。 如何做呢&#xff1f; 这就是列表的作用&#xff0c;能帮助我们更加高效的存储各种数据 思考&#xff1a;如果一个班级100位学生&#xff0c;每个人…

树莓派4B_OpenCv学习笔记15:OpenCv定位物体实时坐标

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1&#xff1a; 今日学习 OpenCv定位物体实时位置&#xff0c;代码来源是…

2024年湖南建筑安全员考试题库,精准题库。

31.安全考核的对象应包括施工企业各管理层的&#xff08;&#xff09;、相关职能部门及岗位和工程项目参建人员。 A.技术负责人 B.安全负责人 C.主要负责人 D.第一负责人 答案&#xff1a;C 32.安全防护设施应标准化、定型化、&#xff08;&#xff09;。 A.规范化 B.工…

力扣 刷题 使用双指针进行数组去重分析

目录 双指针 一、26.删除有序数组中的重复项 题目 题解 二、80. 删除有序数组中的重复项 II 题目 题解 三、27. 移除元素 题目 题解 双指针 我们这里所说的双指针实际上并不是真正的指针&#xff0c;它只是两个变量&#xff0c;用于标识数组的索引等&#xff0c;因其…

深度探讨网络安全:挑战、防御策略与实战案例

目录 ​编辑 一、引言 二、网络安全的主要挑战 恶意软件与病毒 数据泄露 分布式拒绝服务攻击&#xff08;DDoS&#xff09; 内部威胁 三、防御策略与实战案例 恶意软件防护 网络钓鱼防护 数据泄露防护 总结 一、引言 随着信息技术的迅猛发展&#xff0c;网络安全问…