Spark RDD 实现学生成绩分析:平均分、排序、排名
首先,我们需要读取 scoredata.txt 文件,并将其转换为 RDD 格式的数据。然后,我们可以使用 Spark RDD 编程来实现所需的功能。\n\n以下是实现上述要求的完整代码:\n\npython\nfrom pyspark import SparkContext, SparkConf\n\n# 创建 SparkConf 和 SparkContext\nconf = SparkConf().setAppName("ScoreAnalysis")\nsc = SparkContext(conf=conf)\n\n# 读取 scoredata.txt 文件,并转换为 RDD 格式的数据\nlines = sc.textFile("scoredata.txt")\ndata = lines.map(lambda line: line.split("\t"))\n\n# 3) 输出学院每门课的名字和平均分(保留两位小数)\ncourse_avg_scores = data.map(lambda x: (x[1], float(x[2]))) \n .groupByKey() \n .mapValues(lambda x: round(sum(x) / len(x), 2))\ncourse_avg_scores.collect()\n\n# 4) 按学生姓名排序输出每个学生的选课和成绩情况\nstudent_scores = data.map(lambda x: (x[0], (x[1], float(x[2])))) \n .groupByKey() \n .mapValues(list) \n .sortByKey()\nstudent_scores.collect()\n\n# 5) 输出本学期的平均成绩前 10 名的学生与平均分(保留两位小数)\nstudent_avg_scores = data.map(lambda x: (x[0], float(x[2]))) \n .groupByKey() \n .mapValues(lambda x: round(sum(x) / len(x), 2)) \n .sortBy(lambda x: x[1], False)\ntop_10_students = student_avg_scores.take(10)\ntop_10_students\n\n\n在上述代码中,我们首先读取 scoredata.txt 文件,并使用 map 函数将每一行数据分割成姓名、课程名和成绩。然后,我们可以使用不同的 RDD 操作来实现每一个功能要求。\n\n对于第 3 个要求,我们使用 map 函数将课程名和成绩提取出来,并使用 groupByKey 函数将相同课程名的成绩进行分组。然后,我们使用 mapValues 函数计算每门课程的平均分,并使用 round 函数保留两位小数。最后,使用 collect 函数将结果返回到 Driver 程序并打印出来。\n\n对于第 4 个要求,我们使用 map 函数将学生姓名、课程名和成绩提取出来,并使用 groupByKey 函数将相同学生的课程名和成绩进行分组。然后,使用 mapValues 函数将分组后的数据转换为列表形式,并使用 sortByKey 函数按学生姓名进行排序。最后,使用 collect 函数将结果返回到 Driver 程序并打印出来。\n\n对于第 5 个要求,我们使用 map 函数将学生姓名和成绩提取出来,并使用 groupByKey 函数将相同学生的成绩进行分组。然后,使用 mapValues 函数计算每个学生的平均成绩,并使用 round 函数保留两位小数。接下来,我们使用 sortBy 函数按平均成绩进行降序排序,并使用 take 函数取前 10 个学生的数据。最后,将结果打印出来。\n\n请注意,上述代码中的文件路径应根据实际情况进行修改。\n\n希望以上内容对您有所帮助!
原文地址: https://www.cveoy.top/t/topic/pOLk 著作权归作者所有。请勿转载和采集!