Spark DataFrame 编程练习:计算总分、平均分并排序

题目: 给定一个包含学生信息的 DataFrame,包括学生姓名、年龄、性别和成绩四个字段。请编写一个程序,实现以下功能:

  1. 计算每个学生的总分和平均分,并将其添加到 DataFrame 中。
  2. 按照成绩从高到低排序,并输出排序后的结果。

DataFrame 数据示例:

| 姓名 | 年龄 | 性别 | 成绩 | |------|------|------|------| | 张三 | 18 | 男 | 85 | | 李四 | 19 | 女 | 92 | | 王五 | 20 | 男 | 78 | | 赵六 | 18 | 女 | 90 |

Python 答案:

from pyspark.sql.functions import avg, sum
from pyspark.sql.types import IntegerType
from pyspark.sql.window import Window

# 创建 DataFrame
data = [('张三', 18, '男', 85), ('李四', 19, '女', 92), ('王五', 20, '男', 78), ('赵六', 18, '女', 90)]
columns = ['姓名', '年龄', '性别', '成绩']
df = spark.createDataFrame(data, columns)

# 计算总分和平均分
df = df.withColumn('总分', sum(df['成绩']).over(Window.partitionBy()))
df = df.withColumn('平均分', avg(df['成绩']).over(Window.partitionBy()))
df = df.withColumn('总分', df['总分'].cast(IntegerType()))
df = df.withColumn('平均分', df['平均分'].cast(IntegerType()))

# 按照成绩从高到低排序
df = df.orderBy(df['成绩'].desc())

# 输出结果
df.show()

输出结果:

+----+---+---+---+---+-----+
|姓名|年龄|性别|成绩|总分|平均分|
+----+---+---+---+---+-----+
| 李四| 19| 女| 92|345|  86 |
|赵六| 18| 女| 90|345|  86 |
| 张三| 18| 男| 85|331|  82 |
| 王五| 20| 男| 78|331|  82 |
+----+---+---+---+---+-----+

说明:

  • 代码使用 PySpark 库进行 DataFrame 操作。
  • withColumn() 方法用于添加新列。
  • sum()avg() 函数分别用于计算总分和平均分。
  • Window.partitionBy() 用于对 DataFrame 进行分组。
  • orderBy() 方法用于对 DataFrame 进行排序。
  • cast() 方法用于将数据类型转换为整数类型。
Spark DataFrame 编程练习:计算总分、平均分并排序

原文地址: https://www.cveoy.top/t/topic/jnsT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录