【Spark分布式内存计算框架——Spark Core】3. RDD 创建、RDD函数(上)

news/2024/4/27 23:56:42/文章来源:https://blog.csdn.net/CSDNGuoYuying/article/details/128942217

2.4 RDD 分区数目

在讲解 RDD 属性时,多次提到了分区(partition)的概念。分区是一个偏物理层的概念,也是 RDD 并行计算的核心。数据在 RDD 内部被切分为多个子集合,每个子集合可以被认为是一个分区,运算逻辑最小会被应用在每一个分区上,每个分区是由一个单独的任务(task)来运行的,所以分区数越多,整个应用的并行度也会越高。

获取RDD分区数目两种方式
在这里插入图片描述

RDD分区的数据取决于哪些因素?
第一点:RDD分区的原则是使得分区的个数尽量等于集群中的CPU核心(core)数目,这样可以充分利用CPU的计算资源;
第二点:在实际中为了更加充分的压榨CPU的计算资源,会把并行度设置为cpu核数的2~3倍;
第三点:RDD分区数和启动时指定的核数、调用方法时指定的分区数、如文件本身分区数有关系,具体如下说明:

  • 1)、启动的时候指定的CPU核数确定了一个参数值:
    • spark.default.parallelism=指定的CPU核数(集群模式最小2)
  • 2)、对于Scala集合调用parallelize(集合,分区数)方法
    • 如果没有指定分区数,就使用spark.default.parallelism
    • 如果指定了就使用指定的分区数(不要指定大于spark.default.parallelism)
  • 3)、对于textFile(文件, 分区数)
    • defaultMinPartitions
      • 如果没有指定分区数sc.defaultMinPartitions=min(defaultParallelism,2)
      • 如果指定了就使用指定的分区数sc.defaultMinPartitions=指定的分区数rdd的分区数
    • rdd的分区数
      • 对于本地文件
        • rdd的分区数 = max(本地file的分片数, sc.defaultMinPartitions)
      • 对于HDFS文件
        • rdd的分区数 = max(hdfs文件的block数目, sc.defaultMinPartitions)
      • 所以如果分配的核数为多个,且从文件中读取数据创建RDD,即使hdfs文件只有1个切片,最后的Spark的RDD的partition数也有可能是2

第三章 RDD 函数

有一定开发经验的读者应该都使用过多线程,利用多核 CPU 的并行能力来加快运算速率。在开发并行程序时,可以利用类似 Fork/Join 的框架将一个大的任务切分成细小的任务,每个小任务模块之间是相互独立的,可以并行执行,然后将所有小任务的结果汇总起来,得到最终的结果。

一个非常好的例子便是归并排序。对整个序列进行排序时,可以将序列切分成多个子序列进行排序,然后将排好序的子序列归并起来得到最终的结果。
在这里插入图片描述
对 Hadoop 有所了解的读者都知道 map、reduce 操作。对于大量的数据,我们可以通过map 操作让不同的集群节点并行计算,之后通过 reduce 操作将结果整合起来得到最终输出。

3.1 函数分类

对于 Spark 处理的大量数据而言,会将数据切分后放入RDD作为Spark 的基本数据结构,开发者可以在 RDD 上进行丰富的操作,之后 Spark 会根据操作调度集群资源进行计算。总结起来,RDD 的操作主要可以分为 Transformation 和 Action 两种。
在这里插入图片描述
官方文档:http://spark.apache.org/docs/latest/rdd-programming-guide.html#rdd-operations

RDD中操作(函数、算子)分为两类:

  • 1)、Transformation转换操作:返回一个新的RDD
    • which create a new dataset from an existing one
    • 所有Transformation函数都是Lazy,不会立即执行,需要Action函数触发
  • 2)、Action动作操作:返回值不是RDD(无返回值或返回其他的)
    • which return a value to the driver program after running a computation on the datase
    • 所有Action函数立即执行(Eager),比如count、first、collect、take等
      在这里插入图片描述

此外注意RDD中函数细节:
第一点:RDD不实际存储真正要计算的数据,而是记录了数据的位置在哪里,数据的转换关系(调用了什么方法,传入什么函数);
第二点:RDD中的所有转换都是惰性求值/延迟执行的,也就是说并不会直接计算。只有当发生一个要求返回结果给Driver的Action动作时,这些转换才会真正运行。之所以使用惰性求值/延迟执行,是因为这样可以在Action时对RDD操作形成DAG有向无环图进行Stage的划分和并行优化,这种设计让Spark更加有效率地运行。

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

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

相关文章

ChatGPT使用

ChatGPT使用1使用全局模式2无痕模式3日期4短信平台5注册6使用ChatGPT1使用全局模式 因为后面注册时候的号码是印度尼西亚,所以这里我也选择印度尼西亚。 2无痕模式 打开浏览器无痕模式 由于后面网易都是英文,可以在无痕模式里面使用插件 3日期…

mycat学习

安装部署下载1:mycat2-install-template-1.21.zip下载2:mycat2-1.21-release-jar-with-dependencies.jar解压mycat2-install-template-1.21.zipunzip mycat2-install-template-1.21.zip把mycat2-1.21-release-jar-with-dependencies.jar放在mycat/lib中修…

Python列表的元素比较

在用python处理多个列表元素时,需要处理的信息一般比较多且杂。这时运用Python列表元素比较的方法,就能快速处理列表信息,能更轻松访问每个元素。1 问题如何运用Python列表的元素比较解决问题。2 方法方法一 for循环,此情况是list…

车道线检测-Eigenlanes 论文学习笔记

论文:《Eigenlanes: Data-Driven Lane Descriptors for Structurally Diverse Lanes》 代码:https://github.com/dongkwonjin/Eigenlanes 核心:在 Eigenlane Space 中检测车道线 创新点 Eigenlane:数据驱动的车道描述符&#xff…

VHDL语言基础-组合逻辑电路-基本逻辑门电路

数字电路中的四种基本操作是与、或、非及触发器操作,前三种为组合电路,后一种为时序电路。与非 、或非和异或的操作仍然是与、或、非的基本操作。与、或、非、与非、或非和异或等基本逻辑门电路为常用的门电路。 二输入与非门是一种常用的简单逻辑电路&a…

RabbitMQ 部署指南

RabbitMQ 部署指南RabbitMQ部署指南1.单机部署1.1.下载镜像1.2.安装MQ2.安装DelayExchange插件2.1.下载插件2.2.上传插件2.3.安装插件3.集群部署2.1.集群分类2.2.获取cookie2.3.准备集群配置2.4.启动集群2.5.测试2.5.1.数据共享测试2.5.2.可用性测试4.镜像模式4.1.镜像模式的特…

ant-design V4升级V5记录(成功篇)

官方文档:https://ant.design/docs/react/migration-v5-cn 1、安装运行工具之前,提交本地修改内容; 2、工具运行完,根据提示修改文件问题; 3、移除config文件中module, [import,{libraryName:antd, libr…

OpenResty(5):Openresty 模板渲染

1 导入lua-resty-template 下载 http://luarocks.org/modules/bungle/lua-resty-template 将template.lua文件复制到openresty/lualib/resty/目录下 2 示例 2.1 修改nginx.conf 设置模板路径:set $template_root /usr/local/openresty/nginx/html/templates; 设…

windows 重启redis的方法

目录打开本地的文件夹选中文件的路径输入cmd在cmd命令窗口中输入以下的指令指令的内容以及对应的命令含义前言:最近在本地搭建redis环境,突然发现本地的redis启动失败了,使用reids的启动命令也不行,于是找了不少的方法&#xff0c…

六、Linux文件 - lseek函数

目录 1.lseek函数 2.lseek函数实战 2.1宏SEEK_CUR的用法 2.2宏SEEK_END的用法 3.Open函数实战 - O_APPEND的用法 4.Linux在库函数中寻找相应的宏定义 1.lseek函数 off_t lseek(int fd,off_t offset,int whence);光标的偏移量 fd:文件描述符offset:偏移量whence: SEEK_…

Android Jetpack组件之WorkManager后台任务管理的介绍与使用(一)

一、介绍 Jetpack? 我们经常看到,似乎很高端,其实这个就是一个名词,或者说是一种框架概念。 Jetpack 包含一系列 Android 库,它们都采用最佳做法并在 Android 应用中提供向后兼容性。 Jetpack 应用架构指南概述了构…

记录复现一下第一次awd

前言 之前没打过awd,这次学长组织了一场awd娱乐赛,两个web一个pwn,还有一个黑盒,只会web,第一次啥也不会瞎打,被打烂了,不会写脚本,手交flag的感觉真“不错”,感觉awd还…

I/O多路复用

基础概念 Socket 套接字。百科:对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。 例子1:客户端将数据通过网线发送到服务端,客户端发送数据需要一个出口,服务端接收数据需要一个入口,这两个“口子”就是…

开发技术-Java switch case 的简单用法

文章目录1. integral-selector2. case3. break4. default5. 总结最近开发写 switch 发现有的技术点还没有掌握,在此做个记录。ON JAVA 中文版中,关于 switch 的描述为: switch 有时也被划归为一种选择语句。根据整数表达式的值,s…

数据挖掘,计算机网络、操作系统刷题笔记47

数据挖掘,计算机网络、操作系统刷题笔记47 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,orac…

FFmpeg集成qsv的编译安装

文章目录FFmpeg集成qsv的编译安装一、参考二、编译安装流程1. LibVA 和 Media-Driver 的安装2. Intel Media SDK 编译3. ffmpeg的编译安装4. 验证安装FFmpeg集成qsv的编译安装 一、参考 Ubuntu20.04 ffmpeg添加 Intel核显QSV加速支持 视频和视频帧:Intel GPU&…

持续集成Jenkins (四)Jenkins+git+maven项目构建、自动化部署

GIT配置1.1 前言:需要安装 git 客户端.yum install git1.2 Jenkins 配置插件 Git 在仪表盘选择Manage Jenkins>>Plugin Manager>>进入如下页面,可以选择可选的插件,安装完成后的插件在installed里面可以看到,我这里已…

Conda安装到虚拟环境中的包在pycharm中不显示--pip下载的包都到了base环境中-Ubuntu20.04

问题 今天刚装了一个Ubuntu20.04系统,安装完Anaconda,虚拟环境的包也都下载好了,结果在pycharm中配置完解释器后,只有几个基础的包,切换到base环境后发现,这些包都被下载到了base环境中。 在网上查了各种…

安装PhpStorm2020.3

1、卸载旧软件 如果已安装软件,先打开文件安装目录,找到Uninstall.exe点击卸载 删除.jetbrains目录 点击软件“PhpStorm-2020.3.exe”安装 打开软件 打开一个新建的空文件夹,预加载 将BetterIntelliJ.zip拖动到idea的编辑区域 然后…

我们的微服务中为什么需要网关?

说起 Spring Cloud Gateway 的使用场景,我相信很多小伙伴都能够脱口而出认证二字,确实,在网关中完成认证操作,确实是 Gateway 的重要使用场景之一,然而并不是唯一的使用场景。在微服务中使用网关的好处可太多了&#x…