2021-06-09

RDD编程初级实践

RDD编程初级实践

1、 pyspark交互式编程
本作业提供分析数据data.txt,该数据集包含了某大学计算机系的成绩,数据格式如下所示:
Tom,DataBase,80
Tom,Algorithm,50
Tom,DataStructure,60
Jim,DataBase,90
Jim,Algorithm,60
Jim,DataStructure,80
……
2、 编写独立应用程序实现数据去重
对于两个输入文件A和B,编写Spark独立应用程序,对两个文件进行合并,并剔除其中重复的内容,得到一个新文件C。本文给出门课的成绩(A.txt、B.txt)下面是输入文件和输出文件的一个样例,供参考。
输入文件A的样例如下:
20200101 x
20200102 y
20200103 x
20200104 y
20200105 z
20200106 z
输入文件B的样例如下:
20200101 y
20200102 y
20200103 x
20200104 z
20200105 y
根据输入的文件A和B合并得到的输出文件C的样例如下:
20200101 x
20200101 y
20200102 y
20200103 x
20200104 y
20200104 z
20200105 y
20200105 z
20200106 z
3、 编写独立应用程序实现求平均值问题
每个输入文件表示班级学生某个学科的成绩,每行内容由两个字段组成,第一个是学生名字,第二个是学生的成绩;编写Spark独立应用程序求出所有学生的平均成绩,并输出到一个新文件中。本文给出门课的成绩(Algorithm.txt、Database.txt、Python.txt),下面是输入文件和输出文件的一个样例,供参考。
Algorithm成绩:
小明 92
小红 87
小新 82
小丽 90
Database成绩:
小明 95
小红 81
小新 89
小丽 85
Python成绩:
小明 82
小红 83
小新 94
小丽 91
平均成绩如下:
(小红,83.67)
(小新,88.33)
(小明,89.67)
(小丽,88.67)
4、 数据上传及上传结果查看
1、 pyspark交互式编程
在ubuntu打开终端,进入/usr/local/spark/路径下,输入ls查看是否存在data.txt文件,如下图4.1.1

图4.1.1 查找data.txt文件
输入vim data.txt查看data.txt文件内容,如下图4.1.2

图4.1.2 data.txt文件内容
2、 编写独立应用程序实现数据去重
进入/usr/local/spark/mycode/remdup路径下,输入ls查看是否存在A.txt、B.txt文件,如下图4.2.1

图4.2.1 查找A.txt、B.txt文件
输入vim A.txt vim B.txt查看A.txt、B.txt文件内容,如下图4.2.2 、图4.2.3

图4.2.2 A.txt文件内容
图4.2.3 B.txt文件内容
3、 编写独立应用程序实现求平均值问题
进入/usr/local/spark/mycode/avgscore路径下,输入ls查看是否存在Alqorithm.txt、Database.txt、Python.txt文件,如下图4.3.1
图4.3.1查找Alqorithm.txt、Database.txt、Python.txt文件
输入vim Alqorithm.txt、vim Database.txt、vim Python.txt文件查看Alqorithm.txt、Database.txt、Python.txt文件内容,如下图4.3.2 、图4.3.3、图4.3.4

图4.3.2 Alqorithm.txt文件内容
图4.3.3 Database.txt文件内容
在这里插入图片描述

图4.3.4 Python.txt文件内容
5、数据处理过程描述
1、 pyspark交互式编程
输入pyspark进入编程界面,使用lines储存读取data.txt文件里的内容
lines=sc.textFile(‘file:///usr/local/spark/data.txt’)
(1) 该系总共有多少学生;
获取每行数据的第1列:
res = lines.map(lambda x:x.split(",")).map(lambda x: x[0])
使用distinct进行去重操作:res.distinct()
用sum存去重后数据,然后显示sum.count()数据,取元素总个数:
265
具体数据处理过程如下图5.1.1在这里插入图片描述图5.1.1 该系总共有多少学生
(2) 该系共开设了多少门课程;
获取每行数据的第2列:
res = lines.map(lambda x:x.split(",")).map(lambda x:x[1])
使用distinct进行去重操作:res.distinct()
用dis_res存去重后数据,然后显示dis_res.count()数据,取元素总个数:8
具体数据处理过程如下图5.1.2
在这里插入图片描述
图5.1.2 该系共开设了多少门课程
(3) Tom同学的总成绩平均分是多少;
筛选Tom同学的成绩信息
res=lines.map(lambda x:x.split(",")).filter(lambda x:x[0] == “Tom”)
使用res.foreach(print)显示数据,如下图5.1.3
在这里插入图片描述
图5.1.3 筛选Tom同学的成绩信息
提取Tom同学的每门成绩,并转换为int类型:
score = rep.map(lambda x:int(x[2]))
Tom同学的总成绩:sum_score = score.reduce(lambda x,y:x+y)
avg存储平均分=总成绩/门数,然后使用print(avg)显示平均分数值为:30.8
具体数据处理过程如下图5.1.4
在这里插入图片描述
图5.1.4 Tom同学的总成绩平均分是多少
(4) 求每名同学的选修的课程门数;
学生每门课程都对应(学生姓名,1),学生有n门课程则有n个(学生姓名,1)
res = lines.map(lambda x:x.split(",")).map(lambda x:(x[0],1))
对相同key的数据进行处理,最终每个key只保留一条记录,按学生姓名获取每个学生的选课总数:
each_res = res.reduceByKey(lambda x,y: x+y)
然后使用foreach算子显示数值
具体数据处理过程如下图5.1.5
在这里插入图片描述
图5.1.5 求每名同学的选修的课程门数
(5) 该系DataBase课程共有多少人选修;
筛选DataBase课程信息:
res=lines.map(lambda x:x.split(",")).filter(lambda x:x[1] == “DataBase”)
用res.count()显示数值:1764
具体数据处理过程如下图5.1.6
在这里插入图片描述
图5.1.6 该系DataBase课程共有多少人选修
(6) 各门课程的平均分是多少;
为每门课程的分数后面新增一列1,表示1个学生选择了该课程:
res=lines.map(lambda x:x.split(",")).map(lambda x:(x[1],(int(x[2]),1)))
对相同key的数据进行处理,最终每个key只保留一条记录,按课程名聚合课程总分和选课人数:
temp = res.reduceByKey(lambda x,y:(x[0]+y[0],x[1]+y[1]))
并利用round(x,2)计算出每科平均分,平均分=课程总分/选课人数
具体数据处理过程如下图5.1.7
在这里插入图片描述
图5.1.7 各门课程的平均分是多少
(7) 使用累加器计算共有多少人选了DataBase这门课。
筛选DataBase课程信息:
res=lines.map(lambda x:x.split(",")).filter(lambda x:x[1]==“DataBase”)
使用累加器accum ,定义从0开始:
accum = sc.accumulator(0)
使用accum.value输出累加器的最终值:1764
具体数据处理过程如下图5.1.8
在这里插入图片描述
图5.1.8 使用累加器计算共有多少人选了DataBase这门课
2、 编写独立应用程序实现数据去重
进入/usr/local/spark/mycode/remdup目录,在当前目录下新建一个remdup.py文件,如图5.2.1
在这里插入图片描述
图5.2.1 新建编辑remdup.py文件
输入 vim remdup.py编辑程序代码,如下图5.2.2
在这里插入图片描述
图5.2.2 remdup.py程序代码
运行python3 remdup.py
在目录/usr/local/spark/mycode/remdup/result下即可得到结果文件part-00000。如下图5.2.3、图5.2.4
在这里插入图片描述
图5.2.3 文件part-00000
在这里插入图片描述
图5.2.4 文件part-00000内容
3、 编写独立应用程序实现求平均值问题
进入/usr/local/spark/mycode/avgscore目录,在当前目录下新建一个avg.py文件,如图5.3.1
在这里插入图片描述
图5.3.1 新建编辑avg.py文件
输入 vim avg.py编辑程序代码,如下图5.3.2
在这里插入图片描述
图5.3.2 avg.py程序代码
运行python3 remdup.py
在目录/usr/local/spark/mycode/avgscore/result下即可得到结果文件part-00000。如下图5.3.3、图5.3.4
在这里插入图片描述
图5.3.3 文件part-00000
在这里插入图片描述
图5.3.4 文件part-00000内容

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值