spark 实验二 RDD编程初级实践

目录

一. pyspark交互式编程示例(学生选课成绩统计)

该系总共有多少学生;

该系DataBase课程共有多少人选修;

各门课程的平均分是多少;

使用累加器计算共有多少人选了DataBase这门课。

二.编写独立应用程序实现数据去重示例

该系共开设了多少门课程?

Tom同学的总成绩平均分是多少?

求每名同学的选修的课程门数?

编写独立应用程序实现求平均值问题


一. pyspark交互式编程示例(学生选课成绩统计)

请下载chapter4-data1.txt,该数据集包含了某大学计算机系的成绩,数据格式如下所示:

Tom,DataBase,80

Tom,Algorithm,50

Tom,DataStructure,60

Jim,DataBase,90

Jim,Algorithm,60

Jim,DataStructure,80

……

请根据给定的实验数据,在pyspark中通过编程来计算以下内容:

【参考答案】

  1. 该系总共有多少学生;

>>> lines = sc.textFile("file:///usr/local/spark/sparksqldata/Data01.txt")

>>> res = lines.map(lambda x:x.split(",")).map(lambda x: x[0]) //获取每行数据的第1列 

>>> distinct_res = res.distinct()  //去重操作

>>> distinct_res.count()//取元素总个数

//265

答案为:265人

  1. 该系DataBase课程共有多少人选修;

>>> lines = sc.textFile("file:///usr/local/spark/sparksqldata/Data01.txt")

>>> res = lines.map(lambda x:x.split(",")).filter(lambda x:x[1]=="DataBase")

>>> res.count()

//126

答案为126人

  1. 各门课程的平均分是多少;

>>> lines = sc.textFile("file:///usr/local/spark/sparksqldata/Data01.txt")

>>> res = lines.map(lambda x:x.split(",")).map(lambda x:(x[1],(int(x[2]),1))) //为每门课程的分数后面新增一列1,表示1个学生选择了该课程。格式如('ComputerNetwork', (44, 1))

>>> temp = res.reduceByKey(lambda x,y:(x[0]+y[0],x[1]+y[1])) //按课程名聚合课程总分和选课人数。格式如('ComputerNetwork', (7370, 142))

>>> avg = temp.map(lambda x:(x[0], round(x[1][0]/x[1][1],2)))//课程总分/选课人数 = 平均分,并利用round(x,2)保留两位小数

>>> avg.foreach(print)

答案为:

('ComputerNetwork', 51.9)('Software', 50.91)('DataBase', 50.54)('Algorithm', 48.83)('OperatingSystem', 54.94)('Python', 57.82)('DataStructure', 47.57)('CLanguage', 50.61)

使用累加器计算共有多少人选了DataBase这门课。

>>> lines = sc.textFile("file:///usr/local/spark/sparksqldata/Data01.txt")

>>> res = lines.map(lambda x:x.split(",")).filter(lambda x:x[1]=="DataBase")//筛选出选了DataBase课程的数据

>>> accum = sc.accumulator(0) //定义一个从0开始的累加器accum

>>> res.foreach(lambda x:accum.add(1))//遍历res,每扫描一条数据,累加器加1

>>> accum.value //输出累加器的最终值

//126

答案:共有126人

二.编写独立应用程序实现数据去重示例

对于两个输入文件A和B,编写Spark独立应用程序,对两个文件进行合并,并剔除其中重复的内容,得到一个新文件C。下面是输入文件和输出文件的一个样例,供参考。

输入文件A的样例如下:

20170101    x

20170102    y

20170103    x

20170104    y

20170105    z

20170106    z

输入文件B的样例如下:

20170101    y

20170102    y

20170103    x

20170104    z

20170105    y

根据输入的文件A和B合并得到的输出文件C的样例如下:

20170101    x

20170101    y

20170102    y

20170103    x

20170104    y

20170104    z

20170105    y

20170105    z

20170106    z

(1)假设当前目录为/usr/local/spark/mycode/remdup,在当前目录下新建一个remdup.py文件,复制下面代码;

from pyspark import SparkContext

#初始化SparkContext

sc = SparkContext('local','remdup')

#加载两个文件A和B

lines1 = sc.textFile("file:///usr/local/spark/mycode/remdup/A")

lines2 = sc.textFile("file:///usr/local/spark/mycode/remdup/B")

#合并两个文件的内容

lines = lines1.union(lines2)

#去重操作

distinct_lines = lines.distinct()

#排序操作

res = distinct_lines.sortBy(lambda x:x)

#将结果写入result文件中,repartition(1)的作用是让结果合并到一个文件中,不加的话会结果写入到两个文件

res.repartition(1).saveAsTextFile("file:///usr/local/spark/mycode/remdup/result")

(2)最后在目录/usr/local/spark/mycode/remdup下执行下面命令执行程序(注意执行程序时请先退出pyspark shell,否则会出现“地址已在使用”的警告);

$ python3 remdup.py

(3)在目录/usr/local/spark/mycode/remdup/result下即可得到结果文件part-00000。

拓展

  1. 该系共开设了多少门课程?

  1. Tom同学的总成绩平均分是多少?

  1. 求每名同学的选修的课程门数?

  1. 编写独立应用程序实现求平均值问题

每个输入文件表示班级学生某个学科的成绩,每行内容由两个字段组成,第一个是学生名字,第二个是学生的成绩;编写Spark独立应用程序求出所有学生的平均成绩,并输出到一个新文件中。下面是输入文件和输出文件的一个样例,

Algorithm成绩(文件名 Algorithm_.txt):

小明 92

小红 87

小新 82

小丽 90

Database成绩(文件名 Database_.txt):

小明 95

小红 81

小新 89

小丽 85

Python成绩(文件名 Python_.txt):

小明 82

小红 83

小新 94

小丽 91

平均成绩格式如下:

    (小红,83.67)

    (小新,88.33)

    (小明,89.67)

(小丽,88.67)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/432501.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【深圳五兴科技】Java后端面经

本文目录 写在前面试题总览1、java集合2、创建线程的方式3、对spring的理解4、Spring Boot 和传统 Spring 框架的一些区别5、springboot如何解决循环依赖6、对mybatis的理解7、缓存三兄弟8、接口响应慢的处理思路9、http的状态码 写在前面 关于这个专栏: 本专栏记录…

微信小程序云开发教程——墨刀原型工具入门(页面交互+交互案例教程)

引言 作为一个小白,小北要怎么在短时间内快速学会微信小程序原型设计? “时间紧,任务重”,这意味着学习时必须把握微信小程序原型设计中的重点、难点,而非面面俱到。 要在短时间内理解、掌握一个工具的使用&#xf…

AlibabaCloud微服务:Linux 部署 Sentinel 流量控制

目录 一、实验 1.环境 2.Linux 部署 Sentinel 3. 微服务接入Sentinel配置 二、 问题 1.Linux本地启动Sentinel控制台 2.JDBC连接失败 一、实验 1.环境 (1)主机 表1 主机 系统软件版本IP备注Linuxopenjdk 1.8.0192.168.204.200 maven3.5.0nac…

基于QGIS的研究区域遥感影像裁切下载方法-以岳麓区为例

目录 前言 一、数据说明 1、遥感影像 2、矢量范围 二、按矢量范围导出 1、第一步、导出影像 2、第二步、设置输出格式 3、设置裁切范围 4、设置分辨率 三、按矢量范围掩膜 1、第一步、打开裁剪工具 2、第二步、参数设置 ​编辑 3、执行掩膜 四、webgis支持 1、生成运行…

【Redis】Redis持久化模式AOF

目录 引言 AOF持久化模式​编辑​编辑 AOF与RDB的混合持久化(4.x后的新特性) AOF的优缺点 修复破损aof文件 到底用RDB还是AOF 引言 AOF就相当于上面的日志形式。是追加式备份。所有发生的写操作,新增啊,修改啊,删除啊,这些命…

AI大模型与小模型之间的“脱胎”与“反哺”(第四篇)

76. **动态领域适应网络(Dynamic Domain Adaptation Networks, DDANs)**: 创建能动态调整自身参数以适应新行业特性的网络结构,使得AI大模型能在不完全重新训练的情况下快速适应新的业务场景和环境变化。 77. **元学习中的元策略优…

SoraAI优先体验资格注册教程

SoraA1视频工具优先体验资格申请 申请网址:https://openai.com/form/red-teaming-network 申请步骤: 填写基础信息 请使用英文根据内容填写以下内容,名、姓、电子邮件、居住国家、组织隶属关系(如果有)、教育水平 、学位(哪个领…

【数据结构】顺序表+链表

目录 1.顺序表 1.1初始化顺序表 1.2销毁顺序表 1.3检查容量并扩容 1.4把某个元素插入到下标为pos的位置 1.5头插和尾插 1.6删除下标为pos的元素 1.7头删和尾删 2.顺序表的问题及思考 3.链表 3.1链表的访问 3.2链表的增删查改 1.顺序表 顺序表的本质其实就是一个数组…

整合力-整合思维模型和领导力

整合力和领导力是组织成功的两大关键因素。在当今复杂多变的商业环境中,整合力和领导力的结合对于推动组织发展至关重要。本文将探讨整合力和领导力的概念、重要性以及如何有效整合二者以促进组织的成功发展。 ### 整合力的重要性 整合力指的是组织内部各个部门、…

【3GPP】【核心网】【5G】5G核心网协议解析(三)(超详细)

5G协议 NAS协议消息:UE 与 AMF 之间 UE通过5G NAS协议与AMF建立起安全的信令连接,进行用户数据传输和网络服务请求等操作 消息格式:NAS-PDU ------------------------- | Header | NAS Message(s) | ------------------------- Header…

毕业之前准备材料

文章目录 说明第一波截止时间待办事情(共计2)1、读书报告审核(吴海梅老师审核)2、课程学分审核(吴海梅老师审核,曹主216办公室) 第二波外审截止时间待办事情(王移花老师审核&#xf…

Linux下du命令和df命令的使用

du命令作用是估计文件系统的磁盘已使用量,常用于查看文件或目录所占磁盘容量。df命令是统计磁盘使用情况,可以用来查看磁盘已被使用多少空间和还剩余多少空间。du命令语法du [选项] [文件或目录名称]参数:-a:--all, 列…

第七篇:人工智能与机器学习技术VS量测(Measurement)- 我为什么要翻译介绍美国人工智能科技巨头IAB公司 - 它是如何赋能数字化营销生态的?

IAB平台,使命和功能 IAB成立于1996年,总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司,互动广告局(IAB- the Interactive Advertising Bureau)自1996年成立以来,先后为700多家媒…

(每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(四)

项目建议与立项申请、初步可行性研究、详细可行性研究、评估与决策是项目投资前使其的四个阶段。在实际工作中,初步可行性研究和详细可行性研究可以依据项目的规模和繁简程度合二为一,但详细可行性研究是不可缺少的。升级改造项目制作初步和详细研究&…

电脑提示“由于仅部分匹配或匹配不明确,因此无法迁移设备”怎么办?

“由于仅部分匹配或匹配不明确,因此无法迁移设备”错误可能会在将较旧的系统更新到较新的系统版本或者安装了双系统之后出现,此外,驱动程序不兼容、系统文件损坏、计算机接口故障、系统不支持出现错误的外接设备等也可能导致该错误出现。了解…

【Selenium】UI自动化|元素定位常见问题

1、报错NoSuchElementException——定位不到元素 分析的可能原因: 页面还没有加载出来,就对页面上的元素进行的操作 元素在iframe中,先要理解下frame的实质,frame中实际上是嵌入了另一个页面,而webdriver每次只能在一…

Cocos Creator 3.8.x 制作模糊效果(比如游戏弹窗需要的模糊效果)

接着上一个讨论的话题,关于3.8.x的后效,今天来分享自定义后效来制作模糊效果,并将他应用到弹窗中做背景,话不多说开整。 一:最终效果 首先咱们来看官网自定义后效怎么搞的,从它的实例开始:自定义后效 二:定义PostProcessSettings给节点提供资源(通过编辑器修改参数的…

两天学会微服务网关Gateway-Gateway路由规则

锋哥原创的微服务网关Gateway视频教程: Gateway微服务网关视频教程(无废话版)_哔哩哔哩_bilibiliGateway微服务网关视频教程(无废话版)共计17条视频,包括:1_Gateway简介、2_Gateway工作原理、3…

vue3 (四)动态组件Vs异步组件

1.动态组件 点击toggle切换2个组件&#xff0c;配合<keep-alive>使用防止切换后数据丢失 <keep-alive><component :is"currentItem"></component> </keep-alive> 2.异步组件 定义方法&#xff1a;app.component(组件名,Vue.defineAs…

vs创建asp.net core webapi发布到ISS服务器

打开服务器创建test123文件夹&#xff0c;并设置共享。 ISS配置信息&#xff1a; 邮件网站&#xff0c;添加网站 webapi asp.net core发布到ISS服务器网页无法打开解决方法 点击ISS Express测试&#xff0c;可以成功打开网页。 点击生成&#xff0c;发布到服务器 找到服务器IP…