Spark-Scala语言实战(7)

在之前的文章中,我们学习了如何在IDEA中导入jars包,并做了一道例题,了解了RDD。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。

Spark-Scala语言实战(6)-CSDN博客文章浏览阅读695次,点赞15次,收藏24次。今天我会给大家带来如何在IDEA中导入jars包,以及使用SparkRDD,并正确使用它们同时也会给大家讲解一道实训题例。希望在本篇文章中,大家有所收获。也欢迎朋友们到评论区下一起交流学习,共同进步。https://blog.csdn.net/qq_49513817/article/details/137121524?spm=1001.2014.3001.5502

今天开始的文章,我会带给大家如何在spark的中使用我们的RDD方法,今天学习RDD方法中的map,sortby,collect三种方法。

目录

一、知识回顾

二、RDD方法

1.map

2.sortby

3.collect

拓展-RDD和DStream

1.RDD和DStream的区别

2.RDD和DStream的联系


一、知识回顾

导入jars包的过程在上一篇文章中以及讲解的很清楚了,图文一步一步带着做。

主要就是进入Libraries 添加java,然后选择spark的jars文件夹即可

如果还有不懂的朋友可以直接评论问我。

在就是文件的这几行代码

import org.apache.spark.{SparkConf, SparkContext}val conf=new SparkConf().setMaster("local").setAppName("123456")val sc=new SparkContext(conf)

这是配置与方法,记住它们的作用。

现在,开始今天的学习吧

二、RDD方法

1.map

  • map()方法是一种基础的RDD转换操作,可以对RDD中的每一个数据元素通过某种函数进行转换并返回新的RDD
  • map()方法是转换操作,不会立即进行计算。
  • 转换操作是创建RDD的第二种方法,通过转换已有RDD生成新的RDD。因为RDD是一个不可变的集合,所以如果对RDD数据进行了某种转换,那么会生成一个新的RDD

例:

import org.apache.spark.{SparkConf, SparkContext}  // 定义一个名为p1的Scala对象  
object p1 {  // 定义main方法,作为程序的入口点  def main(args: Array[String]): Unit = {  // 创建一个Spark配置对象,并设置运行模式为"local"(本地模式),应用程序名称为"p2"  val conf = new SparkConf().setMaster("local").setAppName("p2")  // 使用Spark配置对象创建一个SparkContext对象,SparkContext是Spark功能的入口点  val sc = new SparkContext(conf)  // 创建一个包含整数的列表,并使用parallelize方法将其转换为RDD  val ppp = sc.parallelize(List(1, 2, 3, 4, 5))  // 使用map操作将RDD中的每个元素乘以2,并返回一个新的RDD  val ppppp = ppp.map(x => x * 2)  //oreach方法遍历并打印每个元素  ppppp.collect().foreach(println)  }  
}

可以看到我们输出的在原列表上*2,达到了代码预期效果

2.sortby

  • sortBy()方法用于对标准RDD进行排序,有3个可输入参数,说明如下。
  • 1个参数是一个函数f:(T) => K,左边是要被排序对象中的每一个元素,右边返回的值是元素中要进行排序的值。
  • 2个参数是ascending,决定排序后RDD中的元素是升序的还是降序的,默认是true,即升序排序,如果需要降序排序那么需要将参数的值设置为false
  • 3个参数是numPartitions,决定排序后的RDD的分区个数,默认排序后的分区个数和排序之前的分区个数相等,即this.partitions.size
  • 第一个参数是必须输入的,而后面的两个参数可以不输入。

例:

import org.apache.spark.{SparkConf, SparkContext}  object p1 {   def main(args: Array[String]): Unit = {     val conf = new SparkConf().setMaster("local").setAppName("p2")  // 使用配置好的conf对象创建一个SparkContext对象sc。   val sc = new SparkContext(conf)  // 使用SparkContext的parallelize方法将包含整数的序列转换成一个RDD。  // 这个RDD现在可以在Spark上并行处理。  val ppp = sc.parallelize(Seq(5, 1, 9, 3, 7))  // 对ppp RDD中的元素进行排序。  // 使用sortBy方法,并传递一个函数x => x作为参数,表示按照元素本身的值进行排序(升序)。  val pppp = ppp.sortBy(x => x)   // 这将返回一个包含RDD所有元素的数组,存储在ppppp中。  val ppppp = pppp.collect()  // 使用foreach方法遍历数组ppppp中的每个元素,并使用println函数打印它们。  ppppp.foreach(println)  }  
}

看下输出可以看到我们的元素已经排序了

3.collect

  • collect()方法是一种行动操作,可以将RDD中所有元素转换成数组并返回到Driver端,适用于返回处理后的少量数据。
  • 因为需要从集群各个节点收集数据到本地,经过网络传输,并且加载到Driver内存中,所以如果数据量比较大,会给网络传输造成很大的压力。
  • 因此,数据量较大时,尽量不使用collect()方法,否则可能导致Driver端出现内存溢出问题。

例:

import org.apache.spark.{SparkConf, SparkContext}object p1 {def main(args: Array[String]): Unit = {val conf=new SparkConf().setMaster("local").setAppName("p2")val sc=new SparkContext(conf)val pp = sc.parallelize(Seq(1, 2, 3, 4, 5))val ppp = pp.collect()ppp.foreach(println)}
}

collect的作用是将RDD中的数据收集到驱动程序中,所以这里运行看不出区别。

拓展-RDD和DStream

在上一篇文章中,我们了解到了RDD,那么DStream是什么呢,我们先来了解一下:

DStream(离散流)是Spark Streaming提供的一种高级抽象,代表了一个持续不断的数据流。DStream的内部实际上是一系列持续不断产生的RDD,每个RDD包含特定时间间隔的数据。DStream的创建可以通过输入数据源如Kafka、Flume,或者通过对其他DStream应用高阶函数如map、reduce、join、window来实现。

1.RDD和DStream的区别

RDDDStream
定义弹性分布式数据集,是Spark中最基本的数据处理模型。离散流,是Spark Streaming提供的一种高级抽象,代表一个持续不断的数据流。
数据结构静态的、不可变的数据集,可以划分为多个分区。动态的、连续的数据流,内部由一系列RDD组成。
数据处理方式批处理,适用于静态数据的处理和分析。流处理,适用于实时数据流的处理和分析。
时间维度无特定的时间维度,主要关注数据的分区和处理。具有时间维度,每个RDD代表一段时间内的数据。
操作方式对整个RDD进行操作,结果生成新的RDD。对DStream进行操作,结果生成新的DStream,底层转换为RDD操作。
应用场景大规模数据的批处理任务,如机器学习、数据挖掘等。实时数据流处理任务,如日志分析、实时监控等。
容错性具有容错性,数据丢失可以自动恢复。继承了RDD的容错性特点。
与Spark的关系Spark的核心组件,用于构建各种数据处理和分析任务。Spark Streaming的核心组件,用于处理实时数据流。

2.RDD和DStream的联系

RDDDStream
基础构建单元RDD是Spark的基本数据处理单元。DStream基于RDD构建,每个时间间隔内的数据对应一个RDD。
计算模型RDD支持分布式计算模型,数据被划分为多个分区进行并行处理。DStream继承了RDD的计算模型,对流数据进行分布式处理。
容错性RDD具有容错性,可以自动恢复丢失的数据。DStream同样具有容错性,因为它基于RDD构建。
操作方式RDD提供了一系列转换操作(如map、reduce)和动作操作(如collect、save)。DStream也提供了类似的操作,这些操作最终会转换为底层RDD的操作。
数据处理能力RDD适用于批处理任务,可以对大规模数据集进行处理和分析。DStream适用于实时流处理任务,可以对连续的数据流进行实时分析和处理。
底层实现DStream内部实际上是由一系列RDD组成的,每个RDD代表一段时间内的数据。DStream的操作最终会转换为RDD的操作,利用RDD的分布式计算能力。
扩展性RDD可以通过自定义操作进行扩展,支持更多的数据处理场景。DStream同样可以通过自定义操作和转换函数进行扩展,以满足特定的实时处理需求

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

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

相关文章

通义千问7B大模型微调

阿里云机器学习试用 登录阿里云,搜索PAI和NAS申请试用即可,都是三个月 工作空间创建好了之后再来创建实例,所谓的实例也即我们运行的云服务器的节点。由于云服务器通常基于虚拟化容器部署,所以会被称为实例,简单…

点点数据K参数加密逆向分析(RPC方案跟加密算法还原)

文章目录 1. 写在前面2. 接口分析3. 断点分析4. RPC调用5. 算法还原 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长…

双出口nat配置示例

一、需求: 局域网内两个网段,vlan10 和 vlan 20,分别实现 vlan10 可访问专网,vlan20 可访问互联网,且两个网段彼此不互通。拓朴如下: 二、配置思路: 1、S1起 vlan10、20,做 acl 配置…

canal: 连接kafka (docker)

一、确保mysql binlog开启并使用ROW作为日志格式 docker 启动mysql 5.7配置文件 my.cnf [mysqld] log-binmysql-bin # 开启 binlog binlog-formatROW # 选择 ROW 模式 server-id1一定要确保上述两个值一个为ROW,一个为ON 二、下载canal的run.sh https://github.c…

鸿蒙 UIAbility和Compent 生命周期

一、UIAbility的生命周期 在UIAbility的使用过程中,会有多种生命周期状态,掌握UIAbility的生命周期,对于应用的开发非常重要。 1、UIAbility的生命周期 UIAbility的生命周期主要分为以下4个: Create---Foreground---Background---…

拷贝对象时的一些编译器优化

在传参和传返回值的过程中&#xff0c;一般编译器会做一些优化&#xff0c;减少对象的拷贝&#xff0c;这个在一些场景下还 是非常有用的。 class A { public:A(int a 0):_a(a){cout << "A(int a)" << endl;}A(const A& aa):_a(aa._a){cout <<…

FL Studio21.2.3中文版音乐制作编曲软件功能展示讲解

FL Studio 21&#xff0c;确实被广大音乐制作人亲切地称为“水果”。这款软件以其强大的功能和用户友好的界面在音乐制作领域占据了重要地位。 FL Studio 21&#xff08;水果&#xff09;是一款全能的音乐创作软件&#xff0c;也是一款强大的编曲软件&#xff0c;可以作为编曲…

Hyper-V 虚拟机设置静态 IP 和外网访问

文章目录 环境说明1 问题简介2 解决过程 环境说明 宿主机操作系统&#xff1a;Windows 11 专业版漏洞复现操作系&#xff1a;debian-live-12.5.0-amd64-standard 1 问题简介 在 Windows 上用自带的 Hyper-V 虚拟机管理应用创建了一个 Debian 12 虚拟机&#xff0c;配置静态 IP…

Java基础之自增自减运算符

Java基础之自增自减运算符 基本用法 int a 10;a; System .out.prinln(a);//a11int a 10;a; System .out.prinln(a);//a11tip: 第一次运算之后a的值会更新 然后再进行下面的运算!!! 练习: 代码呈现: 结果: tip: x的值是最新的x的值.

windows下QT如何集成OpenCV

说明 我在windows下使用QT Creator12创建的CMake项目&#xff0c;需要OpenCV的一些功能。由于安装的时候我选择的QT组件都是MInGW的&#xff0c;所以无法使用VS studio版本的dll库。 为什么vs的版本不能用 我安装QT选择的是MinGW版本&#xff0c;本地编译QT工程只能选择MinG…

揭秘谷歌Gemini Pro 1.5:如何免费体验处理超长对话的AI模型?

最近Google发布大模型API&#xff0c;让人有点想哭的那种。 他们发布了Gemini Pro&#xff0c;这个东西的免费key每分钟能调用60次&#xff01; 想想看&#xff0c;这速度&#xff0c;比GPT-3.5以前的免费key快了30倍不止。 而且&#xff0c;更厉害的是&#xff0c;即使是Ge…

新能源充电桩站场视频汇聚系统建设方案及技术特点分析

随着新能源汽车的普及&#xff0c;充电桩作为新能源汽车的基础设施&#xff0c;其安全性和可靠性越来越受到人们的关注。为了更好地保障充电桩的安全运行与站场管理&#xff0c;TSINGSEE青犀&触角云推出了一套新能源汽车充电桩视频汇聚管理与视频监控方案。 方案采用高清摄…