DataFrame与Spark SQL的由来

news2025/10/19 23:22:17

文章目录

    • DataFrame与Spark SQL的由来
      • RDD 之殇:优化空间受限
      • DataFrame 横空出世
      • 幕后英雄:Spark SQL
        • 基于 DataFrame,Spark SQL 是如何进行优化的
        • Catalyst 优化器
        • Tungsten

DataFrame与Spark SQL的由来

Spark 已经有了 RDD 这个开发入口,为什么还要整出个 DataFrame 来呢?

RDD 之殇:优化空间受限

高阶函数,它指的是形参为函数的函数,或是返回类型为函数的函数。高阶函数,首先本质上也是函数,特殊的地方在于它的形参和返回类型。

RDD算子(如 map、filter等)都需要一个辅助函数 f 来作为形参,通过调用 map(f)、filter(f) 才能完成计算。Spark 只知道开发者要做 map、filter,但并不知道开发者打算怎么做 map 和 filter。

**在 RDD 的开发框架 下,Spark Core 只知道开发者要“做什么”,而不知道“怎么做”。**这让 Spark Core 两眼一抹黑,除了把函数 f 以闭包的形式打发到 Executors 以外,没有额外的优化空间。

DataFrame 横空出世

针对 RDD 优化空间受限的问题,Spark 社区在 1.3 版本发布了 DataFrame。相比 RDD,DataFrame 到底有何不同呢?我们不妨从两个方面来对比它们的不同:一个是数据 的表示形式(Data Representation),另一个是开发算子。

数据表示形式

DataFrame 与 RDD 一样,都是用来封装分布式数据集的。DataFrame 是携带数据模式(Data Schema)的结构化数据,而 RDD 是不携带Schema 的分布式数据集。恰恰是因为有了 Schema 提供明确的类型信息,Spark 才能有针对性地设计出更紧凑的数据结构,从而大幅度提升数据存储与访问效率。

开发算子

RDD 算子多采用高阶函数,高阶函数的优势在于表达能力强,它允许开发者灵活地设计并实现业务逻辑。而 DataFrame 的表达能力却很弱,它定义了一套 DSL 算子(Domain Specific Language),如select、filter、agg、 groupBy等等,它们都属于 DSL 算子。

尽管 DataFrame 算子在表达能力方面更弱,但是 DataFrame 每一个算子的计算逻辑都是确定的,比如 select 用于提取某些字段,groupBy 用于对数据做分组,等等。因此,Spark 可以基于启发式的规则或策略,甚至是动态的运行时信息,去优化 DataFrame 的计算过程。

总结下来,相比 RDD,DataFrame 通过携带明确类型信息的 Schema、以及计算逻辑明确的转换算子,为 Spark 引擎的内核优化打开了全新的空间。

幕后英雄:Spark SQL

首先,Spark Core 特指 Spark 底层执行引擎(Execution Engine)。而 Spark SQL 则凌驾于 Spark Core 之上,是一层独立的优化引擎(Optimization Engine)。Spark Core 负责执行,而 Spark SQL 负责优化,Spark SQL 优化过后的代码,依然要交付 Spark Core 来做执行。

在这里插入图片描述

基于 DataFrame,Spark SQL 是如何进行优化的

Spark SQL 的两个核心组件说起: Catalyst 优化器和 Tungsten

在这里插入图片描述

Catalyst 优化器

Catalyst 优化器,它的职责在于创建并优化执行计划,它包含 3 个功能模块:

  • 创建语法树并生成执行计划;

  • 逻辑阶段优化;

  • 物理阶段优化;

Catalyst 优化器是在逻辑优化阶段,基于启发式的规则和策略(如谓词下推、列裁剪), 调整、优化执行计划,为物理优化阶段提升性能奠定基础。

除了逻辑阶段的优化,Catalyst 在物理优化阶段还会进一步优化执行计划。与逻辑阶段主 要依赖先验的启发式经验不同,物理阶段的优化,主要依赖各式各样的统计信息,如数据表尺寸、是否启用数据缓存、Shuffle 中间文件,等等。逻辑优化更多的是一 种“经验主义”,而物理优化则是“用数据说话”。

Tungsten

Tungsten 用于衔接 Catalyst 执行计划与底层的 Spark Core 执行引擎,它主要负责数据结构优化与执行代码优化。

数据结构优化指的是 Unsafe Row 的设计与实现;执行代码优化则指的 是全阶段代码生成(WSCG,Whole Stage Code Generation)。

为什么要有 Unsafe Row

对于 DataFrame 中的每一条数据记录,Spark SQL 默认采用 org.apache.spark.sql.Row 对象来进行封装和存储,使用 Java Object 来存储数据会引入大量额外的存储开销。

为此,Tungsten 设计并实现了一种叫做 Unsafe Row 的二进制数据结构。Unsafe Row 本质上是字节数组,它以极其紧凑的格式来存储 DataFrame 的每一条数据记录,大幅削减存储开销,从而提升数据的存储与访问效率。

WSCG:全阶段代码生成

代码生成,指的是 同一个 Stage,Tungsten 在运行时把算子之间的“链式调用”捏合为一份代码。

完成 Catalyst 和 Tungsten 这两个优化环节之后,Spark SQL把优化过的执行计划、以及生成的执行代码,交付给Spark Core。Spark Core 拿到计划和代码,在运行时利用 Tungsten Unsafe Row 的数据结构, 完成分布式任务计算。

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

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

相关文章

市场最快图表:LightningChart .NET v.10.4.1 Crack

LightningChart .NET v.10.4.1 已经发布! 新功能、新自定义控件和性能改进 DataCursor:图表中自动数据跟踪的新功能。 在以前的版本中,LightningChart .NET 提供了不同的工具来实现数据跟踪功能,但是这些需要用户进行一些额外的编…

Python-第一天 安装Python和PyCharm

Python-第一天 安装Python和PyCharm一、安装Python1. 下载2. 安装3.验证是否安装成功二、安装和配置PyCharm工具1.下载2.安装3.创建工程4.配置4.1 修改主题4.2 修改默认字体和大小4.3 通过快捷键快速设置字体大小4.4 汉化软件4.5 其它插件4.6 常用快捷建一、安装Python 1. 下载…

计算机图形学02:中点BH算法绘制直线

作者:非妃是公主 专栏:《计算机图形学》 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 文章目录专栏推荐专栏系列文章序一、算法原理二、缺…

计算机科学基础知识第二节讲义

课程链接 运行环境:WSL Ubuntu OMZ终端 PS:看到老师终端具有高亮和自动补全功能,我连夜肝出oh-my-zsh安装教程,实现了此功能。 这节课主要讲变量的语法、控制流程、shell功能等内容。 修改终端用户名,输入密码后重启…

全国青少年编程等级考试scratch三级真题2022年9月(含题库答题软件账号)

青少年编程等级考试scratch真题答题考试系统请点击电子学会-全国青少年编程等级考试真题Scratch一级(2019年3月)在线答题_程序猿下山的博客-CSDN博客_小航答题助手1运行下列程序后,结果为120的是?( )A.B.C…

英语学习:每日翻译

World in a dish盘中知世界 1 How to eat to 100 如何吃到100岁 2 Dan Buettner’s book explores America’s healthiest cuisines 丹比特纳的书探索了美国最健康的美食 注意: 1 cuisines 美食3 Nearly 70% of American adults are overweight; over a thir…

python接口自动化(十)--post请求四种传送正文方式(详解)

简介 post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等。我们要知道post请求四种传送正文方式首先需要先了解一下常见的四种…

游戏服务器性能测试分析实战

今天遇到一个性能压测的问题,也是很多同学做游戏服务器开发经常会遇到的,今天记录一下分享给大家。 性能压测遇到的问题 对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大…

Prometheus node_exporter 部署

Prometheus node_exporter 安装包下载 Prometheus 官网下载地址 包含Prometheus软件及各种exporter插件 node_exporter1.4.0安装包 解压安装 tar -xvf node_exporter-1.4.0.linux-amd64.tar.gz注册服务 可参考 linux 自定义服务 vi /etc/init.d/promethues#!/bin/bash …

python selenium浏览器复用技术

使用selenium 做web自动化的时候,经常会遇到这样一种需求,是否可以在已经打开的浏览器基础上继续运行自动化脚本? 这样前面的验证码登录可以手工点过去,后面页面使用脚本继续执行,这样可以解决很大的一个痛点。 命令行…

Spring 5

文章目录传统JavaWeb开发的困惑IoC、DI和Aop思想提出Spring框架的诞生Spring 框架概述Spring 框架历史Spring Framework技术栈图示BeanFactory 快速入门基于xml的Spring应用基于注解的Spring应用传统JavaWeb开发的困惑 IoC、DI和Aop思想提出 Spring框架的诞生 Spring 框架概述 …

Ansys Lumerical | 纳米线栅偏振器仿真应用

说明 由亚波长金属光栅(纳米线栅偏振器)组成的高对比度偏振控制器件正在取代体光学元件。纳米线栅偏振器提供了较好的消光比对比度、最小的吸收以解决高亮度照明,以及紧凑的形状以便于大规模制造和集成在小型光学器件中。然而,纳米…

代谢组学Nature子刊!抑郁症居然“男女有别”,脑膜淋巴管起关键作用!

文章标题:A functional role of meningeal lymphatics in sex difference of stress susceptibility in mice 发表期刊:Nature Communications 影响因子:17.694 发表时间:2022年8月 作者单位:中山大学中山医学院 …

三层交换机【实验】

目录 1、要求: 2、拓扑: 3、创建vlan和端口定义并划入vlan: 4、创建以太网中继Eth-Trunk使sw1和sw2的相互冗余并且不浪费链路: 5、使用mstp定义组和对应的根: 6、配置网关冗余: 7、核心层的路由的IP配…

基于蜣螂算法改进的DELM分类-附代码

蜣螂算法改进的深度极限学习机DELM的分类 文章目录蜣螂算法改进的深度极限学习机DELM的分类1.ELM原理2.深度极限学习机(DELM)原理3.蜣螂算法4.蜣螂算法改进DELM5.实验结果6.参考文献7.Matlab代码1.ELM原理 ELM基础原理请参考:https://blog.c…

为什么越来越多的团队选择放弃Jira?有哪些替代产品?

国产类似Jira 的软件包括:1.一站式研发项目管理软件 PingCode;2.通用型项目协作工具 Worktile;3.开源项目管理软件 Redmine;4.免费项目管理软件 Trello;5.无代码项目管理软件 Moday;6.小团队项目管理软件 T…

《嵌入式 – GD32开发实战指南》第22章 SPI

开发环境: MDK:Keil 5.30 开发板:GD32F207I-EVAL MCU:GD32F207IK 22.1 SPI简介 SPI,是Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的…

Git修改已有仓库的默认分支并删除其他分支

Git仓库中有一个分支没有用,打算删除掉,查找解决办法,儒雅的烤地瓜 的一篇博客1很详细,我按照他的第三点命令敲入,结果出现报错。 查看博客在git push origin --delete main 这条命令前说了:要删除的分支可…

SAS应用入门学习笔记4

分组和排序&#xff1a; By 语句&#xff1a; 1&#xff09;使用sort过程对观测进行排序&#xff1a; proc sort data输入数据集 <out输出数据集> <其他选项>; # 如果有out&#xff0c;那么原有数据集不变&#xff1b; by 变量列表; # 可以加一个变量或两个…

Swagger3 API接口文档规范课程(内含教学视频+源代码)

Swagger3 API接口文档规范课程&#xff08;内含教学视频源代码&#xff09; 教学视频源代码下载链接地址&#xff1a;https://download.csdn.net/download/weixin_46411355/87431932 目录Swagger3 API接口文档规范课程&#xff08;内含教学视频源代码&#xff09;教学视频源代…