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)

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ImportError: Could not import docarray python package解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Java 学习和实践笔记(27):Object类的基本特性、toString方法以及IDEA的部分快捷键介绍

Object类基本特性: 1.Object类是所有类的父类,所有的Java对象都拥有Object类的属性和方法(注意拥有并不等于可以直接使用) 2.如果在类的声明中未使用extends,则默认继承Object类。 toString方法是Object类里定义的一个…

Java基础 - 8 - 算法、正则表达式

一. 算法 什么是算法? 解决某个实际问题的过程和方法 学习算法的技巧? 先搞清楚算法的流程,再直接去推敲如何写算法 1.1 排序算法 1.1.1 冒泡排序 每次从数组中找出最大值放在数组的后面去 public class demo {public static void main(S…

C++ 归并排序OJ

目录 1、912. 排序数组 2、LCR 170. 交易逆序对的总数 3、315. 计算右侧小于当前元素的个数 4、493. 翻转对 1、912. 排序数组 思路:本次使用归并排序 ,快速排序相当于二叉树的前序遍历,而归并排序相当于后序遍历。 归并排序是一种有效的…

Jenkins设置使用163邮箱发送邮件

目录 一、下载需要的插件 二、开通163邮箱的SMTP服务 三、配置邮箱,测试发送 1、配置Jenkins Location 2、配置Extended E-mail Notification 扩展邮件通知 3、配置默认触发器(可先不配置) ​编辑 4、配置默认的邮件通知 5、测试邮箱…

BUUCTF-DASBOOK1

[第一章][1.3.5 案例解析][极客大挑战 2019]Http 1 1.启动靶机 2.查看源代码,发现有链接 3.点击链接,跳转页面有提示,意思是:它并不来自于https:/Sycsecret.buuoj.cn 打开hackbar,如图所示,然后执行 4.得到…

PyTorch2.0 环境搭建详细步骤(Nvidia显卡)

Step 1 、查看显卡驱动版本 Step2、下载CUDA 11.7 或者11.8(我自己用的这个)也行,稍后我会贴出来版本匹配对应表 CUDA Toolkit - Free Tools and Training | NVIDIA Developer Step3、下载CUDNN cuDNN 9.0.0 Downloads | NVIDIA Developer Step4、安装…

(文末送书)直击前沿技术:《低代码平台开发实践:基于React》

目录 前言 一、React与低代码平台的结合优势 二、基于React的低代码平台开发挑战 三、基于React的低代码平台开发实践 四、书籍推荐 《低代码平台开发实践:基于React》 1、图书介绍 2、适用人群 3、 作者简介 4、写书原由 5、解决问题 6、书…

Application

1.Application的生命周期 自定义Application package com.tiger.chapter06;import android.app.Application; import android.content.res.Configuration; import android.util.Log;import androidx.annotation.NonNull;public class MyApplication extends Application {//在…

1.1 深度学习和神经网络

首先要说的是:深度学习的内容,真的不难。你要坚持下去。 神经网络 这就是一个神经网络。里面的白色圆圈就是神经元。神经元是其中最小的单位。 神经网络 单层神经网络: 感知机 (双层神经网络) 全连接层: …

Unity2013.1.19_DOTS_Burst compiler

Unity2013.1.19_DOTS_Burst compiler DOTS是一种新产品,现在尚在起步阶段。由于它处于持续发展中,随着我们努力使其达到最佳状态,您将看到API会不断演变和日趋成熟。 DOTS包含以下元素: 实体组件系统(ECS) - 提供使用面向数据的…

人工智能艺术的简要时间表

一、简述 技术在任何形式的艺术发展中始终发挥着关键作用。从通过化学发明颜色到通过数学发现分形:艺术、文化和技术是无法完全分开的三个维度。 计算机也不例外,它们从一开始就被用来帮助艺术家,常常揭示出我们无法看到的美丽的复杂性。数字…

It is also possible that a host key has just been changed

问题:ssh失败,提示如上图 分析: ssh的key存在上图里的路径里。 解决:win10删这个文件C:\Users\admin\.ssh\known_hosts , linux删这个文件.ssh\known_hosts ,或者删除这个文件里的制定ip的那一行,例如“106.1.1.22 ecdsa-sha2-…

JavaWeb - 2 - HTML、CSS

什么是HTML、CSS? HTML(HyperText Markup Language):超文本标记语言 超文本:超越了文本的限制,比普通文本更强大,除了文字信息,还可以定义图片、音频、视频等内容 标记语言&…

multiprocessing Event实现中断进程或程序

参考:https://www.cnblogs.com/MoKinLi/p/17931515.html import multiprocessing import timedef worker(event, value):while True:# 检查事件是否被设置if event.is_set():# 事件被设置,中断程序break# 模拟工作time.sleep(1)print(f"Working: {…

Excel小技巧 (2) - 如何去除和增加前导0

1. 如何去除前导0 公式:SUBSTITUTE(A2,0,""),然后拖动十字架,同步所有列数据,轻松搞定。 2. 如何补充前导0 公式:TEXT(D2,"0000000") ,0的个数是数字的完整位数。然后拖动十字架&a…

【概要】软件测试

🍉CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一|统计学|干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项,参与研究经费10w、40w级横向 文…

Docker网络配置

目录 一.Docker网络模式 1.1bridge模式(默认模式) 1.2host模式(仅主机模式) 1.3初识网络模式 1.4查看桥接模式的特点 1.5查看仅主机模式的特点 二.Docker桥接模式 三.host模式 四.自定义网络 一.Docker网络模式 Docker在创建容器时有四种网络模式&am…

结合大象机器人六轴协作机械臂myCobot 280 ,解决特定的自动化任务和挑战!(下)

Limo Pro 小车建图导航 引言 前景提要:我们在上文介绍了使用LIMO cobot 实现一个能够执行复杂任务的复合机器人系统的应用场景的项目,从以下三个方面:概念设计、系统架构以及关键组件。 本文主要深入项目内核的主要部分,同样也主要…

四桥臂三相逆变器动态电压恢复器(DVR)MATLAB仿真

微❤关注“电气仔推送”获得资料(专享优惠) 简介 四桥臂三相逆变器 电路 的一般形式如图 1,为 便于分析 ,将其等效成图所示的电路 。以直流母线电压Ud的 1/2处为参考点 ,逆变器三相和零线相 输 出可等效成…