赞
踩
在教育数据分析领域,经常需要对学生的成绩进行分组和排名。本实战任务通过Apache Spark的Spark SQL模块,实现对学生成绩数据的分组,并求出每个学生分数最高的前3个成绩。
grades.txt
,存储学生姓名和对应的成绩。/topn/input
。grades.txt
上传至HDFS。name
和grade
的多列DataFrame。row_number()
和over()
对每个学生的成绩进行降序排名,并筛选出排名前3的成绩。以下是使用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的窗口函数,可以方便地实现复杂的数据分析任务。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。