Spark-Scala语言实战(6)

news2024/11/16 21:33:19

在之前的文章中,我们学习了如何在scala中定义与使用类和对象,并做了几道例题。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。

Spark-Scala语言实战(5)-CSDN博客文章浏览阅读1.6k次,点赞51次,收藏18次。今天我会给大家带来如何在Scala中定义类和对象,并正确使用它们同时也会给大家讲解一些实训题例。希望在本篇文章中,大家有所收获。也欢迎朋友们到评论区下一起交流学习,共同进步。https://blog.csdn.net/qq_49513817/article/details/136954217?spm=1001.2014.3001.5501今天的文章,我会教大家如何在IDEA中导入我们spark的jars包,并使用RDD方法查看是否导入成功,并完成一道相关例题。

目录

一、知识回顾

二、导入jars包

1.配置

2.方法

三、任务实现

拓展-RDD    

1.什么是rdd

2.RDD的特点

3.RDD框架


一、知识回顾

 在我们的Scala中,有着我们的类(Class)和对象(Object),而我们的类定义了对象的属性和方,而对象是类的实例。

我们可以使用new关键字来创建类的对象。

其次就是构造器

 Scala的类可以有一个或多个构造器,它们用于初始化对象的属性,使用this关键字。

最后就是伴生对象

 在Scala中,每个类都有一个与之关联的伴生对象。这个对象与类共享相同的名称,并且它的定义位于类定义的外部。

现在,开始今天的学习吧

二、导入jars包

 首先,进入File中的project structure

进入Libraries 添加java

选择本地spark文件中的jars即可。

现在,写一个简单的RDD看下我们的jars包是否导入成功

在代码中有几行是我们要注意的 

1.配置

import org.apache.spark.{SparkConf, SparkContext}

 这一行的作用是配置spark应用程序,初始化spark的运行环境。

2.方法

 val conf=new SparkConf().setMaster("local").setAppName("123456")
    val sc=new SparkContext(conf)

 这两行的作用是使用 .setMaster("local") 方法指定了 Spark 应用程序的运行模式。通过 .setAppName("123456") 方法,为 我的Spark 应用程序设置了一个名称。

现在完整代码附上:

import org.apache.spark.{SparkConf, SparkContext}
object p3 {
  def main(args: Array[String]): Unit = {
    val conf=new SparkConf().setMaster("local").setAppName("123456")
    val sc=new SparkContext(conf)
    val data = Array(1,2,3,4,5)
    val distData = sc.parallelize(data)
    print(distData.partitions.size)
    
  }
}

运行结果 ,输出了1

三、任务实现

查询上半年实际薪资排名前3的员工信息,需要对上半年的实际薪资进行排序,而创建RDD时,textFile0方法是将每一行数据作为一条记录存储的,所以在排序前需要先对数据进行转换,实现步骤如下。(任务文档以文章附件提供)
(1)读取CSV文件,将第一行字段名称删除。
(2)将数据按分隔符“”分隔,取出第2列员工姓名和第7列实际薪员工信息 资数据,并将实际薪资数据转换成Int类型数据。
(3)通过sortBy()方法根据实际薪资进行降序排列。
(4)通过take()方法获取上半年实际薪资排名前3的员工信息。

import org.apache.spark.{SparkConf, SparkContext}

object p2 {
  def main(args: Array[String]): Unit = {
    val conf=new SparkConf().setMaster("local").setAppName("p2")
    val sc=new SparkContext(conf)
    val first_half = sc.textFile("C:\\Employee_salary_first_half.csv")
    val drop_first = first_half.mapPartitionsWithIndex((ix,it) => {
      if (ix ==0) it.drop(1)
      it
    })
    val split_first = drop_first.map(line => {val data = line.split(","); (data(1),data(6).toInt)})
    val sort_first =split_first.sortBy(x => x._2,false)
    val ppp=sort_first.take(3)
    println(ppp.toList)
  }
}

使用了 sc.textFile 方法读取位于 "C:\\Employee_salary_first_half.csv" 的 CSV 文件,并将它作为一个 RDD返回。

使用了 mapPartitionsWithIndex 方法去除首行数据,因为首行数据是我们用不到的标题等,

使用了sortBy 方法,按照元组的第二个元素(即第七列的值)进行降序排序。

最后将数据转化为列表输出。

执行代码获得最后结果。

拓展-RDD    

1.什么是rdd

RDD,全称Resilient Distributed Dataset,即弹性分布式数据集,是分布式内存的一个抽象概念。它是Spark中最基本的数据抽象,代表一个不可变、可分区、里面的元素可并行计算的集合。RDD提供了一种高度受限的共享内存模型,即RDD是只读的记录分区的集合,只能通过在其他RDD执行确定的转换操作(如map、join和group by)而创建。

RDD的主要特性包括:

  1. 分区列表:每个RDD被分为多个分区,这些分区运行在集群的不同节点上,每个分区都会被一个计算任务处理,分区数决定并行计算的数量。
  2. 依赖关系:RDD的每次转换都会生成一个新的RDD,所以RDD之间就会形成类似于流水线一样的前后依赖关系,包括窄依赖(一对一)和宽依赖(多对多)。
  3. 容错性:RDD支持高效的容错,数据既可以缓存在内存中,也可以缓存在磁盘中,或者缓存在外部存储中。

RDD的作用是降低了开发分布式应用程序的门槛,提高了执行效率。在RDD中,开发者可以通过简单的操作如map、reduce等完成数据的拆分、通信机制、作业调度等复杂任务。

2.RDD的特点

特点描述
弹性RDD是弹性的,可以在内存中缓存数据,并支持容错性。当计算节点发生故障时,可以重新计算丢失的数据分区,而不需要重新启动整个计算过程。
分区RDD将数据集合划分为多个分区,每个分区存储在不同的计算节点上。这样可以实现数据的并行处理,提高计算效率。
不可变性RDD是不可变的,即不能直接修改RDD中的数据。如果需要对RDD进行转换或操作,会生成一个新的RDD。
延迟计算RDD采用了惰性计算的策略,即只有在需要获取结果时才会进行计算。这样可以避免不必要的计算,提高计算效率。
容错性RDD具有容错性,可以自动从节点失败中恢复过来。如果某个节点上的RDD分区因为节点故障导致数据丢失,RDD会自动通过自己的数据来源重新计算该分区。

3.RDD框架

组件描述
Spark框架一个用于大规模数据处理的快速、通用计算引擎,支持批处理、流处理、图计算和机器学习等。
RDD(弹性分布式数据集)Spark的核心抽象,表示一个只读、可分区的数据集,可以跨集群节点进行计算。
分区(Partition)RDD中的数据被逻辑上划分为多个分区,每个分区存储在不同的节点上,以实现并行计算。
转换操作(Transformations)创建新RDD的操作,如map、filter、flatMap等。这些操作是惰性的,只记录计算逻辑,不立即执行。
动作操作(Actions)触发RDD计算并返回结果到驱动程序的操作,如collect、count、reduce等。
依赖关系(Dependencies)RDD之间的依赖关系,用于描述RDD之间的转换链,支持容错和计算优化。
缓存(Caching)RDD可以缓存在内存中,以便在多次计算中重用,提高计算效率。
容错性(Fault Tolerance)RDD通过记录数据转换的血缘关系实现容错,当节点故障导致数据丢失时,可以重新计算丢失的分区。
调度器(Scheduler)负责任务的调度和分配,将任务发送到合适的节点上执行,以实现高效的并行计算。
执行器(Executor)运行在集群节点上的进程,负责执行具体的计算任务,与驱动程序通信以获取数据和指令。

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

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

相关文章

springboot+mybatis快速搭建入门项目

简介 本文介绍了如何使用idea搭建一个简易springboot后端项目,该项目可以接受前端http请求,经由服务端并访问数据库,最后返回查询结果。该简易项目从零开始搭建,涵盖controller/service/dao层,简单易懂易上手&#xf…

离心式风机运行效率测算

1.总压静压动压; 2.动压0.5空气体密度风速2; 风机所需功率P(KW):PQp/(36001000η0η1) Q—风量,m3/h; p—风机的全风压,Pa; η0—风机的内效率&a…

C++ 控制语句(二)

一 break continue和goto语句 1 break语句 在switch语句中,分隔case子句,跳出switch语句。 在循环语句中可以立即终止循环语句的执行。 2 continue语句 功能:在一次循环过程中,跳过continue语句以下的语句,直 接进入下一次循环操作。 3 goto语句 …

Java学习之方法

目录 方法 方法声明格式: 调用方式: 详细说明 示例 --方法的声明及调用 语句块 练习 方法的重载(overload) 构成条件 示例 --方法重载 递归结构 缺陷 方法 方法(method):一段用于完成特定功能的代码片段,类似于其他语…

【2024年软考】老伙计的软考之路(1)软考报名

一、2024软考改革 仔细看工信部发的软考通知附件,对比上半年和下半年的考试科目变化。 比如高级: 1、信息系统项目管理师从之前的一年考两次变成了今年上半年只考一次。 2、网络规划设计师、系统规划与管理师变成下半年只考一次。 剩下的自己对比着…

Qt 多线程QThread的四种形式

重点: 1.互斥量:QMutex配套使用,lock(),unlock(),如果一个线程准备读取另一个线程数据时候采用tryLock()去锁定互斥量,保证数据完整性。 QMutexLocker简化版的QMutex,在范围区域内使用。 QMutex mutex QMutexLocker locker(&…

Vivado使用(2)——综合运行与OOC

目录 一、综合运行 二、OOC 2.1 如何设置 OOC 模块 2.2 存根文件和黑盒属性 2.3 使用限制 2.4 另一种设置方法 一、综合运行 一个“运行(run)”是指定义和配置设计在综合过程中的各方面,包括:使用到约束,针对的…

使用 OpenOCD 来调试 STM32

STM32 在 Windows 上的交叉编译二 调试 在上一篇博客 《在Windows上交叉编译STM32(环境搭建)》 ,已经让 CubeMX 生成的工程成功编译,并下载到板子上了。 这篇博客主要继续介绍接下来的步骤,调试。硬件是使用的 ST-LINK ,别的也无…

【任职资格】某大型制造型企业任职资格体系项目纪实

该企业以业绩、责任、能力为导向,确定了分层分类的整体薪酬模式,但是每一名员工到底应该拿多少工资,同一个岗位的人员是否应该拿同样的工资是管理人员比较头疼的事情。华恒智信顾问认为,通过任职资格评价能实现真正的人岗匹配&…

RobotFramework编写用例,在Jenkins上如何实现用例的并发运行?

我们了解RobotFramework编写自动化测试用例的方法,了解如何将用例在Jenkins上运行。 但是,随着用例的增多,传统的pybot/robot命令运行测试用例会耗费大量的时间,这就慢慢成为了一个苦恼的问题。 那么,在Jenkins上如何…

Redis数据结构的基础插入操作

数据结构与内部编码 Redis常见的数据结构 数据结构和内部编码 数据结构的插入操作 在Redis中,数据结构的插入操作取决于你要插入的数据类型。以下是一些常见的数据结构和它们的插入操作: 字符串 (String):使用 SET 命令来插入字符串。例…

考研数学|武忠祥学习包搭配《660》和《880》

一、660、880、三大计算简单分析 660题 这本题册具有高难度、综合度和深度,属于高质量的题材。我建议不要在基础阶段就着手解决其中的660题,因为这可能会影响你的信心。相反,你可以在基础阶段完成一轮学习后,将这些题目留到强化…

Linux manim安装

简介 根据文档可知, manim目前分为两个版本, 一个是由3Blue1Brown维护更新的最新版本的manimgl, 另一个是稳定的社区版本manim or manimce. 两个版本在安装和使用上都有些不同, 不要搞混. Linux manim ERROR No package ‘pangocairo’ found Getting requirements to buil…

Spring-IoC-属性注入的注解实现

1、创建对象的注解 Component 用于声明Bean对象的注解,在类上添加该注解后,表示将该类创建对象的权限交给Spring容器。可以直接将这些类直接创建,使用的时候可以直接用。 注解的value属性用于指定bean的id值,value可以省略&…

电源噪声的起因及危害

对造成电源不稳定的根源进行简单分析如下,主要在于两个方面:一是器件高速开关状态下,瞬态的交变电流过大;二是电流回路上存在的电感。从表现形式上来看又可以分为三类:同步开关噪声(SSN),有时被称为Δi噪声,地弹(Ground bounce)现象也可归于此类(图1-a);非理想电…

HTTP状态 405 - 方法不允许

方法有问题。 用Post发的请求&#xff0c;然后用Put接收的。 大家也可以看看是不是有这种问题 <body><h1>HTTP状态 405 - 方法不允许</h1><hr class"line" /><p><b>类型</b> 状态报告</p><p><b>消息…

windwos权限维持

1.php 不死马权限维持 <?php ignore_user_abort(); //关掉浏览器&#xff0c;PHP脚本也可以继续执行. set_time_limit(0);//通过set_time_limit(0)可以让程序无限制的执行下去 $interval 5; // 每隔*秒运行 do { $filename test.php; if(file_exists($filename)) { echo…

Spring Integration 是什么?

Spring Integration 是什么&#xff1f; Spring Integration 在 Spring 家族不太有名气&#xff0c;如果不是有需求&#xff0c;一般也不会仔细去看。那么 Spring Integration 是什么呢&#xff1f;用官方的一句话来解释就是&#xff1a;它是一种轻量级消息传递模块&#xff0…

快速上手Spring Cloud 十四:璀璨物联网之路

快速上手Spring Cloud 一&#xff1a;Spring Cloud 简介 快速上手Spring Cloud 二&#xff1a;核心组件解析 快速上手Spring Cloud 三&#xff1a;API网关深入探索与实战应用 快速上手Spring Cloud 四&#xff1a;微服务治理与安全 快速上手Spring Cloud 五&#xff1a;Spring …

虚幻引擎资源加密方案解析

前段时间&#xff0c;全球游戏开发者大会(Game Developers Conference&#xff0c;简称GDC)在旧金山圆满落幕&#xff0c;会议提供了多份值得参考的数据报告。根据 GDC 调研数据&#xff0c;当下游戏市场中&#xff0c;Unreal Engine (下文简称虚幻)和 Unity 是使用最多的游戏引…