当前位置: 首页 > news >正文

Spark执行计划解析后是如何触发执行的?

在前一篇Spark SQL 执行计划解析源码分析中,笔者分析了Spark SQL 执行计划的解析,很多文章甚至Spark相关的书籍在讲完执行计划解析之后就开始进入讲解Stage切分和调度Task执行,每个概念之间没有强烈的关联,因此这中间总感觉少了点什么,执行计划是如何触发执行的?是Spark自动触发的?还是由客户端的代码触发的?本文笔者为了解答这几个疑问,尝试进行了相关代码的分析。

物理计划都是继承自SparkPlan类,在研究如何触发执行计划之前我们来看一下最终的物理计划是实现逻辑是怎么样的,这里以SparkPlan的子类FileSourceScanExec作为列子来分析一下:
FileSourceScanExec
在非Columnar的模式下,普通的算子执行都是以重写doExecute方法来实现的,FileSourceScanExec同样也不例外,下面是FileSourceScanExec的doExecute方法:
doExecute
在这里插入图片描述

我们可以看到doExecute方法的返回值是RDD[InternalRow], 这也是单个物理计划Node转化成RDD关键一步。到这里我们搞清楚了SparkPlan底层是依赖于RDD实现具体的逻辑,那么接下来我们分析一下Spark是如何将一个一个物理计划节点转换成一个一个RDD的。

首先Spark执行模型是火山模型(又叫迭代器模型),通过迭代器模型,Spark会先调用execute方法,execute方法会调用每个Node的doExecute,而从上面的分析我们可以得知每一个doExecute方法的返回类型都是RDD,因为就把每个单独的Node给串联起来了,具体的代码在SparkPlan.execute。
在这里插入图片描述
下面是一个简单查询对应的物理计划转换成RDD的大致逻辑:
在这里插入图片描述
到这里我们知道知道了多个物理计划Node会转换成多个RDD,而触发这个转换的则是下面的代码,调用了executedPlan.execute(),也就是触发executedPlan转换成RDD。在这里插入图片描述
后续的逻辑就是以RDD来进行的,那么RDD又是如何计算的呢?我们知道RDD分为Transformation和Action两种类型的操作,而Transformation是惰性的,只有Action会触发计算,因此只有Action被调用的时候,RDD才会触发计算,对应的Spark的执行计划才会开始触发具体的逻辑执行。Action算子有很多中,我们可以以常见的show、take等作为入口去分析源码,被调用的地方大部分都在DataSet里面,可以一一对应地查看。

以上的逻辑仅仅是分析Spark地物理计划是如何触发执行的,还没到切分Stage以及调度Task的阶段。从这一部分的源码分析,我们可以清楚的了解到Spark的物理计划是被火山模型如何串联起来的,以及底层的RDD是如何把一一对应的,这对于理解每一个物理执行计划的Node至关重要。无论是SQL还是PySpark等DataFrame操作,最终都会转换成RDD的逻辑。

题外话:笔者之前都是一直只是知道Spark中RDD的概念,但是并没有很深刻的理解RDD的一个重要性,通过本文的分析,才清楚的认识到RDD在Spark当中扮演着如此重要的角色。

相关文章:

Spark执行计划解析后是如何触发执行的?

在前一篇Spark SQL 执行计划解析源码分析中,笔者分析了Spark SQL 执行计划的解析,很多文章甚至Spark相关的书籍在讲完执行计划解析之后就开始进入讲解Stage切分和调度Task执行,每个概念之间没有强烈的关联,因此这中间总感觉少了点…...

B4X编程语言:B4X控件方法汇总

1、AddNode、AddView方法 AddNode(Node As javafx.scence.Node,Left As Double,Top As Double,Width As Double,Height As Double) B4J控件 AddView(View As javafx.scence.Node,Left As Double,Top As Double,Width As Double,Height As Double) B4J的B4XView …...

基于XML配置Bean和基于XML自动装配

目录 基于XML配置Bean id分配规则 通过id获取bean 通过类型获取bean 通过C命名空间配置bean 使用C命名空间 通过P命名空间配置bean 通过util:list进行配置bean 指定id,直接ref引用过来 通过外部属性文件配置Bean Bean信息重用(继承)…...

全排列 dfs

给定一个由不同的小写字母组成的字符串&#xff0c;输出这个字符串的所有全排列。 我们假设对于小写字母有 a<b<…<y<z &#xff0c;而且给定的字符串中的字母已经按照从小到大的顺序排列。 输入格式 输入只有一行&#xff0c;是一个由不同的小写字母组成的字符串…...

linux内存相关命令的尝试

文章目录 前言freeMem 部分的解释Swap 部分的解释 vmstatProcs (进程)Memory (内存)Swap (交换)IO (磁盘 I/O)System (系统)CPU (处理器) pidstat标题行解释数据列解释 sar字段含义解释示例分析 总结 前言 菜就多练&#xff0c;昨天看了一篇有关剖析 RocksDB 内存超限问题的文…...

Vue2 基础

Vue 2 是 Vue.js 的第二个主要版本&#xff0c;于 2016 年发布。它是一个渐进式的 JavaScript 框架&#xff0c;以其简单、灵活、易用性高而广受欢迎。Vue 2 主要专注于构建用户界面&#xff08;UI&#xff09;&#xff0c;并且非常适合用于构建单页应用&#xff08;SPA&#x…...

递归问题(c++)

递归设计思路 数列递归 : 如果一个数列的项与项之间存在关联性&#xff0c;那么可以使用递归实现 ; 原理 : 如果一个函数可以求A(n)&#xff0c;那么该函数就可以求A(n-1)&#xff0c;就形成了递归调用 ; 注意: 一般起始项是不需要求解的&#xff0c;是已知条件 这就是一个典型…...

系统思考—战略决策

别用管理上的勤奋&#xff0c;来掩盖经营上的懒惰。 日本一家物业公司&#xff0c;因经营不善&#xff0c;面临生死存亡的危机。老板为了扭转局面&#xff0c;采取了很多管理手段——提高员工积极性&#xff0c;推行业绩与绩效挂钩&#xff0c;实施各种考核制度。然而&#xf…...

wxwidgets xml插入图片的两种方案

wxwidgets xml插入图片的两种方案: 1.使用wxWidgets中的wxRichTextCtrl插入图片,将wxRichTextCtrl的buffer导出为xml文件 参考richtextctrl例子 if (wxTheClipboard->IsSupported(wxDF_BITMAP)){wxBitmapDataObject data;wxTheClipboard->GetData(data);wxBitmap bi…...

大模型呼入机器人如何赋能呼叫中心?(转)

大模型呼入机器人如何赋能呼叫中心&#xff1f;(转) 原作者&#xff1a;开源呼叫中心FreeIPCC 大模型呼入机器人在赋能呼叫中心方面发挥着重要作用&#xff0c;主要体现在以下几个方面&#xff1a; 一、提升服务效率与质量 24小时不间断服务&#xff1a; 大模型呼入机器人能…...

linux下socket本地套接字通讯

使用套接字除了可以实现网络间不同主机间的通信外&#xff0c;还可以实现同一主机的不同进程间的通信&#xff0c;且建立的通信是双向的通信。socket进程通信与网络通信使用的是统一套接口&#xff0c;只是地址结构与某些参数不同。 用途 进程间通信&#xff1a;本地套…...

NDRCContextUnmarshall断点函数分析之I_RpcBindingCopy函数的作用

NDRCContextUnmarshall断点函数分析之I_RpcBindingCopy函数的作用 第一部分&#xff1a; void RPC_ENTRY NDRCContextUnmarshall ( // process returned context OUT NDR_CCONTEXT PAPI *phCContext,// stub context to update IN RPC_BINDING_HANDLE hRPC, …...

WebView2教程(基于C++)【一】环境初始化

创建一个VisualStudio C项目&#xff0c;通过NuGet包管理器安装两个包&#xff1a; 注意&#xff0c;在项目属性页设置项目使用&#xff1a;C 20&#xff0c;子系统设置成窗口&#xff08;相应的预处理器也要改变&#xff09;&#xff0c;DPI识别设置成每个监视器高DPI识别。 …...

go语言中context的用法

0 概述 Context 是 Go 语言中非常重要的一个概念&#xff0c;它主要用于跨多个函数或 goroutine 传递 取消信号、超时控制、截止时间 和 请求范围数据。在并发编程中&#xff0c;Context 提供了更好的控制和管理&#xff0c;尤其是当你需要在多个 goroutine 之间传递状态或进行…...

概括网络给社会生活带来的种种影响

题目 【2002年国考申论】给定资料反映了网络给社会生活带来的种种影响&#xff0c;用不超过200字对这些影响进行概括。 要求&#xff1a;全面&#xff0c;有条理&#xff0c;有层次。(20分) 审题 特定事实&#xff1a;网络给社会生活带来的种种影响基本题型&#xff1a;单一…...

OpenCV相机标定与3D重建(16)将点从齐次坐标转换为非齐次坐标函数convertPointsFromHomogeneous()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::convertPointsFromHomogeneous 是 OpenCV 库中的一个函数&#xff0c;用于将点从齐次坐标&#xff08;homogeneous coordinates&#xff09;…...

Jmeter如何对UDP协议进行测试?

Jmeter如何对UDP协议进行测试&#xff1f; 1 jmeter-plugins安装2 UDP-Protocol Support安装3 UDP协议测试 1 jmeter-plugins安装 jmeter-plugins是Jmeter的插件管理器&#xff1b;可以组织和管理Jmeter的所有插件&#xff1b;直接进入到如下页面&#xff0c;选择如图的选项进…...

Unix 传奇 | 谁写了 Linux | Unix birthmark

注&#xff1a;本文为 “左耳听风”陈皓的 unix 相关文章合辑。 皓侠已走远&#xff0c;文章有点“年头”&#xff0c;但值得一阅。 文中部分超链已沉寂。 Unix 传奇 (上篇) 2010 年 04 月 09 日 陈皓 了解过去&#xff0c;我们才能知其然&#xff0c;更知所以然。总结过去…...

【网络】传输层协议UDP/TCP网络层IP数据链路层MACNAT详解

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;计算机网络原理_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.传输层协议 UDP 1.1 传输层 1.2 端口号 1.3 UDP 协议 1.3.1 UDP 协议端格式 1.3.2 UDP 的特点 1.3.3 面向数据报 1…...

RTMP推流平台EasyDSS在无人机推流直播安防监控中的创新应用

无人机与低空经济的关系密切&#xff0c;并且正在快速发展。2024年中国低空经济行业市场规模达到5800亿元&#xff0c;其中低空制造产业占整个低空经济产业的88%。预计未来五年复合增速将达到16.03%。 随着科技的飞速发展&#xff0c;公共安防关乎每一个市民的生命财产安全。在…...

微前端路由与导航:在micro-frontends中实现页面跳转的终极指南

微前端路由与导航&#xff1a;在micro-frontends中实现页面跳转的终极指南 【免费下载链接】micro-frontends extending the microservice paradigms to web development 项目地址: https://gitcode.com/gh_mirrors/mi/micro-frontends 微前端&#xff08;micro-fronten…...

会员源码网:站长必备的一站式源码解决方案

作为站长或开发者&#xff0c;你是否经常为寻找合适的源码而烦恼&#xff1f;要么资源老旧难以适配新环境&#xff0c;要么免费源码暗藏后门和广告&#xff0c;要么付费源码价格高昂却效果不佳。在众多源码平台中&#xff0c;会员源码网​ 凭借其独特的会员制模式和优质资源&am…...

ANIMATEDIFF PRO应用案例:如何制作具有电影感的日落海滩动态壁纸

ANIMATEDIFF PRO应用案例&#xff1a;如何制作具有电影感的日落海滩动态壁纸 1. 为什么选择ANIMATEDIFF PRO制作动态壁纸 1.1 普通视频生成工具的局限 大多数视频生成工具在制作动态壁纸时面临三个主要问题&#xff1a; 动作不连贯&#xff1a;海浪拍打、云层移动等自然现象…...

用快马AI快速生成你的第一个微信小程序待办事项原型

用快马AI快速生成你的第一个微信小程序待办事项原型 最近想尝试开发一个微信小程序来管理日常任务&#xff0c;但作为新手&#xff0c;从零开始写代码确实有点无从下手。好在发现了InsCode(快马)平台&#xff0c;它通过AI生成代码的能力&#xff0c;帮我快速搭建了一个待办事项…...

RMBG-2.0与FastAPI结合:高性能背景移除服务

RMBG-2.0与FastAPI结合&#xff1a;高性能背景移除服务 1. 引言 电商商家每天需要处理大量商品图片&#xff0c;手动抠图不仅耗时耗力&#xff0c;而且效果参差不齐。传统背景移除工具要么精度不够&#xff0c;要么处理速度慢&#xff0c;根本无法满足高并发场景的需求。 现…...

# 007、复杂驱动与ECU抽象:硬件深度访问与传感器执行器集成

深夜的示波器 上周三凌晨两点,产线测试报出一个诡异问题:某个车窗控制模块在低温下偶发升窗抖动。逻辑层代码检查了三遍,RTE接口确认无误,可问题就在那里——像幽灵一样时隐时现。最后把示波器探头直接钩到电机驱动芯片的引脚上,才发现是MOSFET栅极驱动波形在低温下出现了…...

SEO原创文章的发布频率应该如何确定

SEO原创文章的发布频率应该如何确定 在当今的互联网时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为网站运营的关键环节之一。为了在百度上获得更好的排名&#xff0c;发布高质量的原创文章是必不可少的策略。如何确定SEO原创文章的发布频率&#xff0c;是许…...

OpenClaw自动化测试新思路:千问3.5-27B生成与执行UI测试用例

OpenClaw自动化测试新思路&#xff1a;千问3.5-27B生成与执行UI测试用例 1. 为什么我们需要重新思考UI测试 作为一位经历过手工测试、录制回放、脚本维护三个阶段的老测试工程师&#xff0c;我始终被一个问题困扰&#xff1a;测试用例的维护成本永远与业务复杂度成正比。直到…...

COMSOL培训视频:开启多物理场仿真新世界

COMSOL 培训视频。 该软件是一款多物理场仿真工具&#xff0c;广泛应用于工程、物理和科学的许多领域。 它的主要功能包括但不限于以下几种分析&#xff1a; 1. **结构力学分析**&#xff1a;- 静力学和动态力学分析&#xff0c;包括应力、应变和变形。- 线性和非线性分析。- 参…...

Topeka Android应用终极部署指南:从源码编译到多渠道分发的完整教程

Topeka Android应用终极部署指南&#xff1a;从源码编译到多渠道分发的完整教程 【免费下载链接】topeka A fun to play quiz that showcases material design on Android 项目地址: https://gitcode.com/gh_mirrors/to/topeka Topeka是一款基于Material Design设计理念…...