Spark-Scala语言实战(6)

这篇具有很好参考价值的文章主要介绍了Spark-Scala语言实战(6)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在之前的文章中,我们学习了如何在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),而我们的类定义了对象的属性和方,而对象是类的实例。

val first_half=sc.textfile('/user/root/employee_salary_first_half.csv') bash,Spark-大数据技术与应用,spark,scala,大数据,开发语言,后端,分布式

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

其次就是构造器

 Scala的类可以有一个或多个构造器,它们用于初始化对象的属性,使用this关键字。val first_half=sc.textfile('/user/root/employee_salary_first_half.csv') bash,Spark-大数据技术与应用,spark,scala,大数据,开发语言,后端,分布式

最后就是伴生对象

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

val first_half=sc.textfile('/user/root/employee_salary_first_half.csv') bash,Spark-大数据技术与应用,spark,scala,大数据,开发语言,后端,分布式

现在,开始今天的学习吧

二、导入jars包

 首先,进入File中的project structureval first_half=sc.textfile('/user/root/employee_salary_first_half.csv') bash,Spark-大数据技术与应用,spark,scala,大数据,开发语言,后端,分布式

进入Libraries 添加java

val first_half=sc.textfile('/user/root/employee_salary_first_half.csv') bash,Spark-大数据技术与应用,spark,scala,大数据,开发语言,后端,分布式

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

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

val first_half=sc.textfile('/user/root/employee_salary_first_half.csv') bash,Spark-大数据技术与应用,spark,scala,大数据,开发语言,后端,分布式

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

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

val first_half=sc.textfile('/user/root/employee_salary_first_half.csv') bash,Spark-大数据技术与应用,spark,scala,大数据,开发语言,后端,分布式

三、任务实现

查询上半年实际薪资排名前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 方法,按照元组的第二个元素(即第七列的值)进行降序排序。

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

执行代码获得最后结果。

val first_half=sc.textfile('/user/root/employee_salary_first_half.csv') bash,Spark-大数据技术与应用,spark,scala,大数据,开发语言,后端,分布式

拓展-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等完成数据的拆分、通信机制、作业调度等复杂任务。文章来源地址https://www.toymoban.com/news/detail-854041.html

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) 运行在集群节点上的进程,负责执行具体的计算任务,与驱动程序通信以获取数据和指令。

到了这里,关于Spark-Scala语言实战(6)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spark-Scala语言实战(11)

    在之前的文章中,我们学习了如何在spark中使用RDD中的cartesian,subtract最终两种方法。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 Spark-Scala语言实战(10)-CSDN博客 文章浏览阅读977次,点赞32次,

    2024年04月09日
    浏览(41)
  • Spark-Scala语言实战(13)

    在之前的文章中,我们学习了如何在spark中使用键值对中的keys和values,reduceByKey,groupByKey三种方法。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 Spark-Scala语言实战(12)-CSDN博客 文章浏览阅读72

    2024年04月08日
    浏览(48)
  • Spark-Scala语言实战(15)

    在之前的文章中,我们学习了如何在spark中使用键值对中的学习键值对方法中的lookup,cogroup两种方法。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 Spark-Scala语言实战(14)-CSDN博客 文章浏览阅

    2024年04月15日
    浏览(51)
  • Spark-Scala语言实战(7)

    在之前的文章中,我们学习了如何在IDEA中导入jars包,并做了一道例题,了解了RDD。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 Spark-Scala语言实战(6)-CSDN博客 文章浏览阅读695次,点赞15次,

    2024年04月15日
    浏览(54)
  • Spark-Scala语言实战(8)

    在之前的文章中,我们学习了如何在spark中使用RDD方法的map,sortby,collect。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 Spark-Scala语言实战(7)-CSDN博客 文章浏览阅读802次,点赞22次,收藏8次。​

    2024年04月11日
    浏览(46)
  • Spark大数据分析与实战笔记(第一章 Scala语言基础-2)

    Spark是专为大规模数据处理而设计的快速通用的计算引擎,它是由Scala语言开发实现的,关于大数据技术,本身就是计算数据,而Scala既有面向对象组织项目工程的能力,又具备计算数据的功能,同时Spark和Scala的紧密集成,本书将采用Scala语言开发Spark程序,所以学好Scala将有助

    2024年02月11日
    浏览(62)
  • Spark大数据分析与实战笔记(第一章 Scala语言基础-3)

    对于每一门编程语言来说,数组(Array)都是重要的数据结构之一,主要用来存储数据类型相同的元素。Scala中的数组分为定长数组和变长数组,定义定长数组,需要使用new,而定义变长数组时,则需要导包 import scala.collection.mutable.ArrayBuffer 。 数组(Array)主要用来存储

    2024年02月10日
    浏览(64)
  • Spark大数据分析与实战笔记(第一章 Scala语言基础-1)

    Spark是专为大规模数据处理而设计的快速通用的计算引擎,它是由Scala语言开发实现的,关于大数据技术,本身就是计算数据,而Scala既有面向对象组织项目工程的能力,又具备计算数据的功能,同时Spark和Scala的紧密集成,本书将采用Scala语言开发Spark程序,所以学好Scala将有助

    2024年02月11日
    浏览(67)
  • spark底层为什么选择使用scala语言开发

    基于Scala的语言特性 集成性:Scala 是一种运行在 Java 虚拟机(JVM)上的静态类型编程语言,可以与 Java 代码无缝集成。由于 Spark 涉及到与大量 Java 生态系统的交互,例如 Hadoop、Hive 等,使用 Scala 可以方便地与这些组件进行集成和交互。 函数式编程支持:Scala 是一种面向函数

    2024年02月10日
    浏览(57)
  • 大数据Spark SparkSession的3种创建方式 Scala语言实现

    SparkSession是Apache Spark 2.0版本引入的一个编程接口,用于与Spark进行交互。它是Spark应用程序的入口点,提供了一种方便的方式来创建DataFrame、DataSet和SQLContext等数据结构,并且可以配置各种Spark应用程序的选项。SparkSession还管理了Spark应用程序的运行环境,包括Spark集群的连接,

    2023年04月20日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包