第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)# 定义累加器参数classMyAccumulatorParam(AccumulatorParam):defzero(self, value):return value
defaddInPlace(self, acc1, acc2):return acc1 + acc2
# 读取文本文件
lines = sc.textFile("file:///data/bigfiles/data.txt")# 使用累加器统计选修 DataBase 课程的人数defcount_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 ################
如有侵权请联系删除
版权归原作者 檀似锦河灿烂 所有, 如有侵权,请联系我们删除。