educoder大数据作业答案

educoder大数据作业答案

码农世界 2024-05-28 后端 83 次浏览 0个评论

第1关:第一题

  • 任务描述
  • 编程要求
  • 测试说明

    任务描述

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

    编程要求

    打开右侧代码文件窗口,在 Begin 至 End 区域补充代码,完成任务。

    在本地目录 /data/bigfiles 中有两个文件 a.txt 与 b.txt,现在需要对这两个文件进行合并,并剔除其中重复的内容,将合并结果存储到 /root/result/ 目录下。

    下面是 a.txt 与 b.txt存储的内容示例:

    20170101    x20170102    y20170103    x20170104    y20170105    z20170106    z......
    

    合并结果按首列升序进行排列。

    测试说明

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

    代码文件:
    from pyspark import SparkContext, SparkConf
    ################ Begin ################
    # 创建SparkContext对象
    sc = SparkContext('local','remdup')
    # 加载两个文件
    lines1 = sc.textFile("file:///data/bigfiles/a.txt")
    lines2 = sc.textFile("file:///data/bigfiles/b.txt")
    # 合并两个文件的内容
    lines = lines1.union(lines2)
    # 去重操作
    distinct_lines = lines.distinct()
    # 排序操作
    res = distinct_lines.sortBy(lambda x:x)
    # 保存结果
    res.repartition(1).saveAsTextFile("file:///root/result")
    # 关闭SparkContext对象
    sc.stop()
    ################ End ################
    

    第2关:第二题

    • 任务描述
    • 编程要求
    • 测试说明

      任务描述

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

      编程要求

      打开右侧代码文件窗口,在 Begin 至 End 区域补充代码,完成任务。

      在本地目录 /data/bigfiles 中有三个文件 Algorithm.txt、Database.txt 和 Python.txt。其中每行存储的内容由两个字段组成,第一个是学生名字,第二个是学生的成绩。

      请你读取这三个文件的内容,计算各个学生的平均成绩(保留两位小数),将输出结果存储到 /root/result2/ 目录下。

      下面是上述文件一个样例,供参考。

      小明 92小红 87小新 82小丽 90......
      

      输出示例:

      ('小红',82.88)('小明',81.23)......
      

      输出结果按平均分成绩降序进行排列。

      测试说明

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

      代码文件:
      from pyspark import SparkContext
      ################ Begin ################
      # 创建SparkContext对象
      sc = SparkContext('local', 'average_score')
      # 加载三个文件
      file_path_algorithm = "/data/bigfiles/Algorithm.txt"
      file_path_database = "/data/bigfiles/Database.txt"
      file_path_python = "/data/bigfiles/Python.txt"
      data_algorithm = sc.textFile(file_path_algorithm)
      data_database = sc.textFile(file_path_database)
      data_python = sc.textFile(file_path_python)
      # 合并三个文件的内容
      merged_data = data_algorithm.union(data_database).union(data_python)
      # 完成数据聚合
      student_scores = merged_data.map(lambda line: (line.split()[0], float(line.split()[1])))
      # 求平均分并排序
      average_scores = student_scores.groupByKey().mapValues(lambda scores: round(sum(scores) / len(scores), 2))
      sorted_scores = average_scores.sortBy(lambda x: x[1], ascending=False)
      # 保存结果
      result_path = "/root/result2/"
      sorted_scores.saveAsTextFile(result_path)
      # 关闭SparkContext对象
      sc.stop()
      ################ End ################
      

      第二关

      第2关:第一题

      任务描述

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

      编程要求

      打开右侧代码文件窗口,在 Begin 至 End 区域补充代码,完成任务。

      在 pyspark 中读取 Linux 系统本地文件 /data/bigfiles/data.txt,该数据集包含了某大学计算机系的成绩,数据格式如下所示:

      Tom,DataBase,80Tom,Algorithm,50Tom,DataStructure,60Jim,DataBase,90Jim,Algorithm,60Jim,DataStructure,80……
      

      第一列为学生姓名,第二列为课程名称,第三列为课程成绩。

      统计该系总共有多少名学生,直接打印输出统计的结果。

      输出示例如下:

      该系共有学生:n 人
      

      测试说明

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

      from pyspark import SparkContext
      ###############Begin##############
      # 创建SparkContext对象
      sc = SparkContext("local", "Student Count")
      # 读取文本文件
      lines = sc.textFile("file:///data/bigfiles/data.txt")
      # 统计学生人数
      arr = lines.map(lambda x:x.split(",")).map(lambda x: x[0])
      distinct_res = arr.distinct()
      res=distinct_res.count() 
      # 打印结果
      print("\n该系共有学生:%d 人"%res)
      # 关闭SparkContext对象
      sc.stop()
      ###############End################
      

      第2关:第二题

      任务描述

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

      编程要求

      打开右侧代码文件窗口,在 Begin 至 End 区域补充代码,完成任务。

      在 pyspark 中读取 Linux 系统本地文件 /data/bigfiles/data.txt,该数据集包含了某大学计算机系的成绩,数据格式如下所示:

      Tom,DataBase,80Tom,Algorithm,50Tom,DataStructure,60Jim,DataBase,90Jim,Algorithm,60Jim,DataStructure,80……
      

      第一列为学生姓名,第二列为课程名称,第三列为课程成绩。

      统计该系共开设了多少门课程,直接打印输出统计的结果。

      输出示例如下:

      该系共有 n 门课程
      

      测试说明

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

      from pyspark import SparkContext
      ################ Begin ################
      # 创建SparkContext对象
      sc = SparkContext("local", "Course Count")
      # 读取文本文件
      lines = sc.textFile("file:///data/bigfiles/data.txt")
      # 统计课程数量
      course_count = lines.map(lambda x: x.split(",")[1]).distinct().count()
      # 打印结果
      print("\n该系共有 %d 门课程" % course_count)
      # 关闭SparkContext对象
      sc.stop()
      ################ End ################
      

      第2关:第三题

      任务描述

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

      编程要求

      打开右侧代码文件窗口,在 Begin 至 End 区域补充代码,完成任务。

      在 pyspark 中读取 Linux 系统本地文件 /data/bigfiles/data.txt,该数据集包含了某大学计算机系的成绩,数据格式如下所示:

      Tom,DataBase,80Tom,Algorithm,50Tom,DataStructure,60Jim,DataBase,90Jim,Algorithm,60Jim,DataStructure,80……
      

      第一列为学生姓名,第二列为课程名称,第三列为课程成绩。

      计算 Tom 同学的总成绩平均分是多少(保留一位小数),直接打印输出计算的结果。

      输出示例如下:

      Tom 同学的总成绩平均分为:xx.x 分
      

      测试说明

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

      from pyspark import SparkContext
      ################ Begin ################
      # 创建SparkContext对象
      sc = SparkContext("local", "Tom Average Score")
      # 读取文本文件
      lines = sc.textFile("file:///data/bigfiles/data.txt")
      # 计算 Tom 同学的平均分
      tom_scores = lines.filter(lambda x: x.startswith("Tom")).map(lambda x: float(x.split(",")[2]))
      average_score = tom_scores.mean()
      # 打印结果
      print("\nTom 同学的总成绩平均分为:%.1f 分" % average_score)
      # 关闭SparkContext对象
      sc.stop()
      ################ End ################
      

      第2关:第四题

      任务描述

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

      编程要求

      打开右侧代码文件窗口,在 Begin 至 End 区域补充代码,完成任务。

      在 pyspark 中读取 Linux 系统本地文件 /data/bigfiles/data.txt,该数据集包含了某大学计算机系的成绩,数据格式如下所示:

      Tom,DataBase,80Tom,Algorithm,50Tom,DataStructure,60Jim,DataBase,90Jim,Algorithm,60Jim,DataStructure,80……
      

      第一列为学生姓名,第二列为课程名称,第三列为课程成绩。

      求每名同学选修的课程门数,直接打印输出计算的结果。

      输出示例如下:

      ('Lewis', 4)('Mike', 3)('Walter', 4)('Conrad', 2)('Borg', 4)……
      

      测试说明

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

      from pyspark import SparkContext
      ################ Begin ################
      # 创建SparkContext对象
      sc = SparkContext("local", "Courses Count")
      # 读取文本文件
      lines = sc.textFile("file:///data/bigfiles/data.txt")
      # 统计各个同学选修课程数量
      res = lines.map(lambda x:x.split(",")).map(lambda x:(x[0],1)) #学生每门课程都对应
      each_res = res.reduceByKey(lambda x,y: x+y) #按学生姓名获取每个学生的选课总数
      # 打印结果
      each_res.foreach(print)
      # 关闭SparkContext对象
      sc.stop()
      ################ End ################ 
      

      第2关:第五题

      任务描述

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

      编程要求

      打开右侧代码文件窗口,在 Begin 至 End 区域补充代码,完成任务。

      在 pyspark 中读取 Linux 系统本地文件 /data/bigfiles/data.txt,该数据集包含了某大学计算机系的成绩,数据格式如下所示:

      Tom,DataBase,80Tom,Algorithm,50Tom,DataStructure,60Jim,DataBase,90Jim,Algorithm,60Jim,DataStructure,80……
      

      第一列为学生姓名,第二列为课程名称,第三列为课程成绩。

      统计该系 DataBase 课程共有多少人选修,直接打印输出计算的结果。

      输出示例如下:

      选修 DataBase 课程的同学共有 n 位
      

      测试说明

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

      from pyspark import SparkContext
      ################ Begin ################
      # 创建SparkContext对象
      sc = SparkContext("local", "DataBase Students Count")
      # 读取文本文件
      lines = sc.textFile("file:///data/bigfiles/data.txt")
      # 统计选修 DataBase 课程的人数
      arr = lines.map(lambda x:x.split(",")).filter(lambda x:x[1]=="DataBase")
      res = arr.count()
      # 打印结果
      print("\n选修 DataBase 课程的同学共有 %d 位" % res)
      # 关闭SparkContext对象
      sc.stop()
      ################ End ################
      

      第2关:第六题

      任务描述

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

      编程要求

      打开右侧代码文件窗口,在 Begin 至 End 区域补充代码,完成任务。

      在 pyspark 中读取 Linux 系统本地文件 /data/bigfiles/data.txt,该数据集包含了某大学计算机系的成绩,数据格式如下所示:

      Tom,DataBase,80Tom,Algorithm,50Tom,DataStructure,60Jim,DataBase,90Jim,Algorithm,60Jim,DataStructure,80……
      

      第一列为学生姓名,第二列为课程名称,第三列为课程成绩。

      统计该系各门课程的平均分是多少(保留一位小数),直接打印输出计算的结果。

      输出示例如下:

      ('ComputerNetwork', 51.9)('Software', 50.91)('DataBase', 50.54)......
      

      测试说明

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

      from pyspark import SparkContext
      ################ Begin ################
      # 创建SparkContext对象
      sc = SparkContext("local", "Courses Average")
      # 读取文本文件
      lines = sc.textFile("file:///data/bigfiles/data.txt")
      # 统计该系各门课程的平均分
      res = lines.map(lambda x: x.split(",")).map(lambda x: (x[1], (int(x[2]), 1)))
      temp = res.reduceByKey(lambda x, y: (x[0] + y[0], x[1] + y[1]))  # 按课程名聚合课程总分和选课人数
      # 课程总分/选课人数 = 平均分,保留一位小数
      avg = temp.map(lambda x: (x[0], round(x[1][0] / x[1][1], 1)))
      # 打印结果
      avg.foreach(print)
      # 关闭SparkContext对象
      sc.stop()
      ################ End ################
      

      第2关:第七题

      任务描述

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

      编程要求

      打开右侧代码文件窗口,在 Begin 至 End 区域补充代码,完成任务。

      在 pyspark 中读取 Linux 系统本地文件 /data/bigfiles/data.txt,该数据集包含了某大学计算机系的成绩,数据格式如下所示:

      Tom,DataBase,80Tom,Algorithm,50Tom,DataStructure,60Jim,DataBase,90Jim,Algorithm,60Jim,DataStructure,80……
      

      第一列为学生姓名,第二列为课程名称,第三列为课程成绩。

      使用累加器计算共有多少人选了 DataBase 这门课,直接打印输出计算的结果。

      输出示例如下:

      共有 n 名同学选修了 DataBase 课程
      

      测试说明

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

      from pyspark import SparkContext
      from pyspark.accumulators import AccumulatorParam
      ################ Begin ################
      # 创建SparkContext对象
      sc = SparkContext("local", "DataBase Students Count")
      # 创建累加器
      data_base_students_count = sc.accumulator(0)
      # 定义累加器参数
      class MyAccumulatorParam(AccumulatorParam):
          def zero(self, value):
              return value
          def addInPlace(self, acc1, acc2):
              return acc1 + acc2
      # 读取文本文件
      lines = sc.textFile("file:///data/bigfiles/data.txt")
      # 使用累加器统计选修 DataBase 课程的人数
      def count_data_base_students(line):
          global data_base_students_count
          if line.split(",")[1] == "DataBase":
              data_base_students_count += 1
      # 使用 foreach 方法遍历 RDD 并应用累加器
      lines.foreach(count_data_base_students)
      # 打印结果
      print("\n共有 %d 名同学选修了 DataBase 课程" % data_base_students_count.value)
      # 关闭SparkContext对象
      sc.stop()
      ################ End ################
      

      如有侵权请联系删除

转载请注明来自码农世界,本文标题:《educoder大数据作业答案》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,83人围观)参与讨论

还没有评论,来说两句吧...

Top