educoder大数据作业答案

打印 上一主题 下一主题

主题 552|帖子 552|积分 1656

第1关:第一题



  • 任务形貌
  • 编程要求
  • 测试说明

任务形貌

本关任务:根据编程要求,完成任务。
编程要求

打开右侧代码文件窗口,在 BeginEnd 区域增补代码,完成任务。
在本地目录 /data/bigfiles 中有两个文件 a.txt 与 b.txt,现在需要对这两个文件进行合并,并剔除其中重复的内容,将合并结果存储到 /root/result/ 目录下。
下面是 a.txt 与 b.txt存储的内容示例:
  1. 20170101    x20170102    y20170103    x20170104    y20170105    z20170106    z......
复制代码
  合并结果按首列升序进行分列。
  测试说明

平台将对你编写的代码进行评测,假如与预期结果一致,则通关,否则测试失败。
代码文件:

  1. from pyspark import SparkContext, SparkConf
  2. ################ Begin ################
  3. # 创建SparkContext对象
  4. sc = SparkContext('local','remdup')
  5. # 加载两个文件
  6. lines1 = sc.textFile("file:///data/bigfiles/a.txt")
  7. lines2 = sc.textFile("file:///data/bigfiles/b.txt")
  8. # 合并两个文件的内容
  9. lines = lines1.union(lines2)
  10. # 去重操作
  11. distinct_lines = lines.distinct()
  12. # 排序操作
  13. res = distinct_lines.sortBy(lambda x:x)
  14. # 保存结果
  15. res.repartition(1).saveAsTextFile("file:///root/result")
  16. # 关闭SparkContext对象
  17. sc.stop()
  18. ################ End ################
复制代码
第2关:第二题



  • 任务形貌
  • 编程要求
  • 测试说明

任务形貌

本关任务:根据编程要求,完成任务。
编程要求

打开右侧代码文件窗口,在 BeginEnd 区域增补代码,完成任务。
在本地目录 /data/bigfiles 中有三个文件 Algorithm.txt、Database.txt 和 Python.txt。其中每行存储的内容由两个字段构成,第一个是学生名字,第二个是学生的结果。
请你读取这三个文件的内容,计算各个学生的平均结果(保存两位小数),将输出结果存储到 /root/result2/ 目录下。
下面是上述文件一个样例,供参考。
  1. 小明 92小红 87小新 82小丽 90......
复制代码
输出示例:
  1. ('小红',82.88)('小明',81.23)......
复制代码
  输出结果按平均分结果降序进行分列。
  测试说明

平台将对你编写的代码进行评测,假如与预期结果一致,则通关,否则测试失败。
代码文件:

  1. from pyspark import SparkContext
  2. ################ Begin ################
  3. # 创建SparkContext对象
  4. sc = SparkContext('local', 'average_score')
  5. # 加载三个文件
  6. file_path_algorithm = "/data/bigfiles/Algorithm.txt"
  7. file_path_database = "/data/bigfiles/Database.txt"
  8. file_path_python = "/data/bigfiles/Python.txt"
  9. data_algorithm = sc.textFile(file_path_algorithm)
  10. data_database = sc.textFile(file_path_database)
  11. data_python = sc.textFile(file_path_python)
  12. # 合并三个文件的内容
  13. merged_data = data_algorithm.union(data_database).union(data_python)
  14. # 完成数据聚合
  15. student_scores = merged_data.map(lambda line: (line.split()[0], float(line.split()[1])))
  16. # 求平均分并排序
  17. average_scores = student_scores.groupByKey().mapValues(lambda scores: round(sum(scores) / len(scores), 2))
  18. sorted_scores = average_scores.sortBy(lambda x: x[1], ascending=False)
  19. # 保存结果
  20. result_path = "/root/result2/"
  21. sorted_scores.saveAsTextFile(result_path)
  22. # 关闭SparkContext对象
  23. sc.stop()
  24. ################ End ################
复制代码
第二关

第2关:第一题

任务形貌

本关任务:根据编程要求,完成任务。
编程要求

打开右侧代码文件窗口,在 BeginEnd 区域增补代码,完成任务。
在 pyspark 中读取 Linux 系统本地文件 /data/bigfiles/data.txt,该数据集包含了某大学计算机系的结果,数据格式如下所示:
  1. Tom,DataBase,80Tom,Algorithm,50Tom,DataStructure,60Jim,DataBase,90Jim,Algorithm,60Jim,DataStructure,80……
复制代码
  第一列为学生姓名,第二列为课程名称,第三列为课程结果。
  统计该系统共有多少名学生,直接打印输出统计的结果。
输出示例如下:
  1. 该系共有学生:n 人
复制代码
测试说明

平台将对你编写的代码进行评测,假如与预期结果一致,则通关,否则测试失败。
  1. from pyspark import SparkContext
  2. ###############Begin##############
  3. # 创建SparkContext对象
  4. sc = SparkContext("local", "Student Count")
  5. # 读取文本文件
  6. lines = sc.textFile("file:///data/bigfiles/data.txt")
  7. # 统计学生人数
  8. arr = lines.map(lambda x:x.split(",")).map(lambda x: x[0])
  9. distinct_res = arr.distinct()
  10. res=distinct_res.count()
  11. # 打印结果
  12. print("\n该系共有学生:%d 人"%res)
  13. # 关闭SparkContext对象
  14. sc.stop()
  15. ###############End################
复制代码
第2关:第二题

任务形貌

本关任务:根据编程要求,完成任务。
编程要求

打开右侧代码文件窗口,在 BeginEnd 区域增补代码,完成任务。
在 pyspark 中读取 Linux 系统本地文件 /data/bigfiles/data.txt,该数据集包含了某大学计算机系的结果,数据格式如下所示:
  1. Tom,DataBase,80Tom,Algorithm,50Tom,DataStructure,60Jim,DataBase,90Jim,Algorithm,60Jim,DataStructure,80……
复制代码
  第一列为学生姓名,第二列为课程名称,第三列为课程结果。
  统计该系共开设了多少门课程,直接打印输出统计的结果。
输出示例如下:
  1. 该系共有 n 门课程
复制代码
测试说明

平台将对你编写的代码进行评测,假如与预期结果一致,则通关,否则测试失败。
  1. from pyspark import SparkContext
  2. ################ Begin ################
  3. # 创建SparkContext对象
  4. sc = SparkContext("local", "Course Count")
  5. # 读取文本文件
  6. lines = sc.textFile("file:///data/bigfiles/data.txt")
  7. # 统计课程数量
  8. course_count = lines.map(lambda x: x.split(",")[1]).distinct().count()
  9. # 打印结果
  10. print("\n该系共有 %d 门课程" % course_count)
  11. # 关闭SparkContext对象
  12. sc.stop()
  13. ################ End ################
复制代码
第2关:第三题

任务形貌

本关任务:根据编程要求,完成任务。
编程要求

打开右侧代码文件窗口,在 BeginEnd 区域增补代码,完成任务。
在 pyspark 中读取 Linux 系统本地文件 /data/bigfiles/data.txt,该数据集包含了某大学计算机系的结果,数据格式如下所示:
  1. Tom,DataBase,80Tom,Algorithm,50Tom,DataStructure,60Jim,DataBase,90Jim,Algorithm,60Jim,DataStructure,80……
复制代码
  第一列为学生姓名,第二列为课程名称,第三列为课程结果。
  计算 Tom 同砚的总结果平均分是多少(保存一位小数),直接打印输出计算的结果。
输出示例如下:
  1. Tom 同学的总成绩平均分为:xx.x 分
复制代码
测试说明

平台将对你编写的代码进行评测,假如与预期结果一致,则通关,否则测试失败。
  1. from pyspark import SparkContext
  2. ################ Begin ################
  3. # 创建SparkContext对象
  4. sc = SparkContext("local", "Tom Average Score")
  5. # 读取文本文件
  6. lines = sc.textFile("file:///data/bigfiles/data.txt")
  7. # 计算 Tom 同学的平均分
  8. tom_scores = lines.filter(lambda x: x.startswith("Tom")).map(lambda x: float(x.split(",")[2]))
  9. average_score = tom_scores.mean()
  10. # 打印结果
  11. print("\nTom 同学的总成绩平均分为:%.1f 分" % average_score)
  12. # 关闭SparkContext对象
  13. sc.stop()
  14. ################ End ################
复制代码
第2关:第四题

任务形貌

本关任务:根据编程要求,完成任务。
编程要求

打开右侧代码文件窗口,在 BeginEnd 区域增补代码,完成任务。
在 pyspark 中读取 Linux 系统本地文件 /data/bigfiles/data.txt,该数据集包含了某大学计算机系的结果,数据格式如下所示:
  1. Tom,DataBase,80Tom,Algorithm,50Tom,DataStructure,60Jim,DataBase,90Jim,Algorithm,60Jim,DataStructure,80……
复制代码
  第一列为学生姓名,第二列为课程名称,第三列为课程结果。
  求每名同砚选修的课程门数,直接打印输出计算的结果。
输出示例如下:
  1. ('Lewis', 4)('Mike', 3)('Walter', 4)('Conrad', 2)('Borg', 4)……
复制代码
测试说明

平台将对你编写的代码进行评测,假如与预期结果一致,则通关,否则测试失败。
  1. from pyspark import SparkContext
  2. ################ Begin ################
  3. # 创建SparkContext对象
  4. sc = SparkContext("local", "Courses Count")
  5. # 读取文本文件
  6. lines = sc.textFile("file:///data/bigfiles/data.txt")
  7. # 统计各个同学选修课程数量
  8. res = lines.map(lambda x:x.split(",")).map(lambda x:(x[0],1)) #学生每门课程都对应
  9. each_res = res.reduceByKey(lambda x,y: x+y) #按学生姓名获取每个学生的选课总数
  10. # 打印结果
  11. each_res.foreach(print)
  12. # 关闭SparkContext对象
  13. sc.stop()
  14. ################ End ################
复制代码
第2关:第五题

任务形貌

本关任务:根据编程要求,完成任务。
编程要求

打开右侧代码文件窗口,在 BeginEnd 区域增补代码,完成任务。
在 pyspark 中读取 Linux 系统本地文件 /data/bigfiles/data.txt,该数据集包含了某大学计算机系的结果,数据格式如下所示:
  1. Tom,DataBase,80Tom,Algorithm,50Tom,DataStructure,60Jim,DataBase,90Jim,Algorithm,60Jim,DataStructure,80……
复制代码
  第一列为学生姓名,第二列为课程名称,第三列为课程结果。
  统计该系 DataBase 课程共有多少人选修,直接打印输出计算的结果。
输出示例如下:
  1. 选修 DataBase 课程的同学共有 n 位
复制代码
测试说明

平台将对你编写的代码进行评测,假如与预期结果一致,则通关,否则测试失败。
  1. from pyspark import SparkContext
  2. ################ Begin ################
  3. # 创建SparkContext对象
  4. sc = SparkContext("local", "DataBase Students Count")
  5. # 读取文本文件
  6. lines = sc.textFile("file:///data/bigfiles/data.txt")
  7. # 统计选修 DataBase 课程的人数
  8. arr = lines.map(lambda x:x.split(",")).filter(lambda x:x[1]=="DataBase")
  9. res = arr.count()
  10. # 打印结果
  11. print("\n选修 DataBase 课程的同学共有 %d 位" % res)
  12. # 关闭SparkContext对象
  13. sc.stop()
  14. ################ End ################
复制代码
第2关:第六题

任务形貌

本关任务:根据编程要求,完成任务。
编程要求

打开右侧代码文件窗口,在 BeginEnd 区域增补代码,完成任务。
在 pyspark 中读取 Linux 系统本地文件 /data/bigfiles/data.txt,该数据集包含了某大学计算机系的结果,数据格式如下所示:
  1. Tom,DataBase,80Tom,Algorithm,50Tom,DataStructure,60Jim,DataBase,90Jim,Algorithm,60Jim,DataStructure,80……
复制代码
  第一列为学生姓名,第二列为课程名称,第三列为课程结果。
  统计该系各门课程的平均分是多少(保存一位小数),直接打印输出计算的结果。
输出示例如下:
  1. ('ComputerNetwork', 51.9)('Software', 50.91)('DataBase', 50.54)......
复制代码
测试说明

平台将对你编写的代码进行评测,假如与预期结果一致,则通关,否则测试失败。
  1. from pyspark import SparkContext
  2. ################ Begin ################
  3. # 创建SparkContext对象
  4. sc = SparkContext("local", "Courses Average")
  5. # 读取文本文件
  6. lines = sc.textFile("file:///data/bigfiles/data.txt")
  7. # 统计该系各门课程的平均分
  8. res = lines.map(lambda x: x.split(",")).map(lambda x: (x[1], (int(x[2]), 1)))
  9. temp = res.reduceByKey(lambda x, y: (x[0] + y[0], x[1] + y[1]))  # 按课程名聚合课程总分和选课人数
  10. # 课程总分/选课人数 = 平均分,保留一位小数
  11. avg = temp.map(lambda x: (x[0], round(x[1][0] / x[1][1], 1)))
  12. # 打印结果
  13. avg.foreach(print)
  14. # 关闭SparkContext对象
  15. sc.stop()
  16. ################ End ################
复制代码
第2关:第七题

任务形貌

本关任务:根据编程要求,完成任务。
编程要求

打开右侧代码文件窗口,在 BeginEnd 区域增补代码,完成任务。
在 pyspark 中读取 Linux 系统本地文件 /data/bigfiles/data.txt,该数据集包含了某大学计算机系的结果,数据格式如下所示:
  1. Tom,DataBase,80Tom,Algorithm,50Tom,DataStructure,60Jim,DataBase,90Jim,Algorithm,60Jim,DataStructure,80……
复制代码
  第一列为学生姓名,第二列为课程名称,第三列为课程结果。
  使用累加器计算共有多少人选了 DataBase 这门课,直接打印输出计算的结果。
输出示例如下:
  1. 共有 n 名同学选修了 DataBase 课程
复制代码
测试说明

平台将对你编写的代码进行评测,假如与预期结果一致,则通关,否则测试失败。
  1. from pyspark import SparkContext
  2. from pyspark.accumulators import AccumulatorParam
  3. ################ Begin ################
  4. # 创建SparkContext对象
  5. sc = SparkContext("local", "DataBase Students Count")
  6. # 创建累加器
  7. data_base_students_count = sc.accumulator(0)
  8. # 定义累加器参数
  9. class MyAccumulatorParam(AccumulatorParam):
  10.     def zero(self, value):
  11.         return value
  12.     def addInPlace(self, acc1, acc2):
  13.         return acc1 + acc2
  14. # 读取文本文件
  15. lines = sc.textFile("file:///data/bigfiles/data.txt")
  16. # 使用累加器统计选修 DataBase 课程的人数
  17. def count_data_base_students(line):
  18.     global data_base_students_count
  19.     if line.split(",")[1] == "DataBase":
  20.         data_base_students_count += 1
  21. # 使用 foreach 方法遍历 RDD 并应用累加器
  22. lines.foreach(count_data_base_students)
  23. # 打印结果
  24. print("\n共有 %d 名同学选修了 DataBase 课程" % data_base_students_count.value)
  25. # 关闭SparkContext对象
  26. sc.stop()
  27. ################ End ################
复制代码
如有侵权请接洽删除

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊雷无声

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表