【Spark】架构与核心组件:大数据时代的必备技能(下)

🐇明明跟你说过:个人主页

🏅个人专栏:《大数据前沿:技术与应用并进》🏅

🔖行路有良友,便是天堂🔖

目录

一、引言

1、什么是Apache Spark

2、Spark 的应用场景:

二、Spark核心组件之一:RDD

1、什么是RDD

2、RDD 的特点

3、RDD 的容错机制:

4、何时使用 RDD

三、Spark核心组件之二:DataFrame

1、什么是DataFrame

2、DataFrame 的特点

3、DataFrame 与 RDD 的对比

4、DataFrame 的优势:

5、适用场景

四、Spark核心组件之三:Dataset

1、什么是Dataset

2、Dataset 的特点:

3、Dataset 的工作原理

4、Dataset 和 DataFrame 的关系

5、Dataset 与 RDD、DataFrame 的对比


一、引言

1、什么是Apache Spark

Apache Spark 是一个开源的大数据处理框架,它支持高效的分布式计算,并能够处理大规模数据集。Spark 提供了一个统一的编程模型,支持批处理、流处理、机器学习和图计算等多种数据处理模式。Spark 以其内存计算的特性和高效的任务调度而著称,比传统的大数据处理框架(如 Hadoop MapReduce)具有更高的性能和灵活性。

2、Spark 的应用场景:

  • 批处理:Spark 可以处理大规模数据集的批量处理任务,类似于 Hadoop 的 MapReduce。
  • 流处理:Spark Streaming 可以实时处理流数据,适用于日志分析、社交媒体分析等实时数据分析场景。
  • 机器学习:通过 MLlib,Spark 提供了大规模机器学习的支持,适用于推荐系统、分类、回归等任务。
  • 图计算:GraphX 提供了图计算的能力,适用于社交网络分析、路径计算等图数据处理任务。

 

二、Spark核心组件之一:RDD

1、什么是RDD

RDD(Resilient Distributed Dataset)是 Apache Spark 的核心数据结构,它是一个不可变的、分布式的数据集。RDD 具有高度的容错性、可分布性和支持并行计算的特点,因此成为 Spark 中进行分布式数据处理的基础。RDD 的设计使得 Spark 能够在大规模集群中高效地处理数据,同时提供容错机制,以确保即使在部分计算失败的情况下,数据也能恢复。

2、RDD 的特点

弹性(Resilient):

  • RDD 通过 数据血统(Lineage) 来实现容错性。数据血统是 RDD 的操作日志,它记录了生成当前 RDD 的所有操作(如 map、filter 等)。如果某个节点发生故障,Spark 可以通过重新计算丢失的数据分区来恢复数据,保证系统的容错性。

分布式(Distributed):

  • RDD 是分布式的,它的数据可以存储在集群的不同节点上。每个 RDD 都有多个分区,每个分区由集群中的一个节点存储和处理,支持并行计算。

不可变(Immutable):

  • 一旦 RDD 被创建,它的数据不能被修改。对 RDD 的操作(如 map()、filter())会生成新的 RDD,而不会改变原始 RDD 的内容。这种不可变性使得 Spark 可以更好地管理并行计算和容错。

支持并行操作:

  • RDD 支持分布式并行操作,用户可以对 RDD 执行各种转换操作和行动操作,从而在集群中并行地处理数据。

支持各种数据来源:

  • RDD 可以从多种数据源读取,如本地文件系统、HDFS、S3、HBase 等。

3、RDD 的容错机制:

RDD 的容错性是通过 数据血统(Lineage) 来实现的。数据血统是 RDD 中记录操作依赖关系的数据结构。例如,当对一个 RDD 进行一系列转换操作时,Spark 会记录这些操作,并生成一个 DAG(有向无环图)。如果某个数据分区丢失,Spark 可以根据数据血统重新计算该分区的数据,而不需要重新计算整个数据集。


4、何时使用 RDD

  • 需要细粒度控制:如果你需要对数据处理的细节进行精确控制,或者需要执行复杂的操作(如自定义的转换),RDD 是更好的选择。
  • 数据非结构化:当数据是非结构化的,或者你没有现成的 Schema 来描述数据时,RDD 是更加灵活的选择。

 

三、Spark核心组件之二:DataFrame

1、什么是DataFrame

DataFrame 是 Spark 中的一个重要数据抽象,它是一个分布式的、以列为基础的数据集,类似于传统数据库中的表格。DataFrame 通过结构化数据的方式提供了比 RDD 更高层次的抽象,它可以通过 SQL 查询、DataFrame API 或者 Dataset API 进行处理。

在 Spark 2.x 版本中,DataFrame Dataset API 被作为面向结构化数据的高级 API 引入,用于替代传统的 RDD 操作。它们提供了更高的抽象层次和更好的性能优化,尤其是在 SQL 查询和优化方面。

2、DataFrame 的特点

结构化数据:

  • DataFrame 是由命名列组成的二维表格。每一列都有明确的数据类型,且每一列的名称都是可以访问的。这使得数据更加规范化,便于查询和分析。
  • DataFrame 支持 Schema(模式),即每列都有数据类型(例如,整型、字符串、日期等)。

优化查询:

  • DataFrame 提供了查询优化能力,得益于 Catalyst 查询优化器。通过 Catalyst,Spark 能够对 SQL 查询进行一系列优化(如谓词下推、投影剪裁、常量折叠等),以提高查询性能。
  • DataFrame 还支持 Tungsten 执行引擎,能够通过代码生成、内存管理等技术提升执行效率。

支持多种数据源:

  • DataFrame 支持多种数据源,包括 HDFS、Hive、HBase、Parquet、ORC、JSON、JDBC、Kafka 等。
  • 可以通过 Spark SQL 来处理各种格式的数据,并将结果输出到不同的数据存储中。

跨语言支持:

  • DataFrame API 不仅支持 Scala、Java,还支持 Python 和 R(PySpark 和 SparkR)。通过 Spark SQL,你可以用 SQL 语句来操作 DataFrame,这使得它成为一个跨语言的数据分析工具。

不需要显式类型定义:

  • 与 RDD 中的元素类型不同,DataFrame 允许自动推断数据类型(称为 Schema Inference),不需要显式地定义每一列的数据类型。

不可变性:

  • 和 RDD 一样,DataFrame 是不可变的。这意味着对 DataFrame 的任何转换操作都会返回一个新的 DataFrame,而不会修改原始数据。

3、DataFrame 与 RDD 的对比

 

4、DataFrame 的优势:

  • 高效的查询优化:通过 Catalyst 优化器和 Tungsten 执行引擎,DataFrame 提供了更高效的数据处理和计算性能。
  • 更简洁的 API:相比于 RDD,DataFrame 提供了更简洁的 API,支持 SQL 查询语法,更易于上手。
  • 支持多种数据源:DataFrame 能够从各种数据源(如 Hive、JDBC、Parquet、JSON 等)中读取数据,并可以将处理结果输出到多种存储系统。
  • 跨语言支持:DataFrame API 支持多种编程语言,包括 Scala、Java、Python 和 R。

5、适用场景

  • 结构化数据处理:DataFrame 适合处理结构化的数据,特别是当你需要进行 SQL 查询、数据转换和聚合时。
  • ETL 和数据分析:如果你的应用场景涉及大量的 ETL 操作,DataFrame 提供了丰富的转换和操作函数,极大提高了开发效率。
  • 与 Hive 集成:DataFrame 方便与 Hive 集成,可以直接从 Hive 中查询数据,也可以将 DataFrame 结果写入 Hive 表。

四、Spark核心组件之三:Dataset

1、什么是Dataset

Dataset 是 Spark 2.x 版本中引入的一个核心组件,旨在提供比 DataFrame 更强的类型安全性,同时结合了 RDD 和 DataFrame 的优点。它是 Spark 的另一种数据抽象,提供了一个强类型的 API,能够在编译时检查类型,从而增加了类型安全性。Dataset API 结合了 RDD 的灵活性和 DataFrame 的优化性能。

2、Dataset 的特点:

强类型:

  • Dataset 是强类型的,意味着你可以在编译时获得类型检查,避免运行时错误。与 DataFrame 相比,Dataset 是基于 JVM 类型的,因此能够在编译阶段捕捉类型错误。

可扩展性:

  • Dataset 继承了 RDD 的所有特性,可以处理非结构化和半结构化的数据。你可以使用 Dataset API 完成复杂的转换和聚合操作,同时享有 Spark SQL 的优化和数据处理能力。

兼容性:

  • Dataset 和 DataFrame 之间可以互相转换。实际上,DataFrame 是 Dataset 的一个特例,即 DataFrame 是一个不带类型的 Dataset。在 Scala 或 Java 中,Dataset 是强类型的,而在 Python 或 R 中,Dataset 是弱类型的,实际上它会作为 DataFrame 处理。

融合了 RDD 和 DataFrame 的优点:

  • 类型安全性:Dataset 提供了 RDD 的强类型特性(编译时检查类型)。
  • 性能优化:与 DataFrame 一样,Dataset 也能够受益于 Spark 的 Catalyst 查询优化器和 Tungsten 执行引擎。

支持 Lambda 表达式:

  • 在 Scala 和 Java 中,Dataset 支持使用 Lambda 表达式,便于处理复杂的转换和操作。

支持 SQL 查询:

  • Dataset 可以与 Spark SQL 结合使用,可以通过 SQL 语句对 Dataset 进行查询,类似于对 DataFrame 的操作。

 

3、Dataset 的工作原理

Dataset 采用 JVM 类型系统,能够在编译时进行类型检查,并在运行时利用 Spark 的 Catalyst 查询优化器和 Tungsten 执行引擎提供高效的执行。

4、Dataset 和 DataFrame 的关系

  • 在 Spark 中,DataFrame 是 Dataset 的一种特殊形式,它的元素没有明确的类型。可以将 DataFrame 看作是一种 "未类型化" 的 Dataset,而 Dataset 则是一个强类型的 API。
  • 在 Scala 和 Java 中,Dataset 提供了强类型支持,例如:
    •  Dataset[String] 表示包含字符串的 Dataset。
    •  Dataset[Row] 是 DataFrame 的基本类型,表示行数据。
  • 在 Python 和 R 中,Dataset 是通过 DataFrame 实现的,没有明确的类型检查。

5、Dataset 与 RDD、DataFrame 的对比

  

 💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于大数据的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!    

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

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

相关文章

NLP中的神经网络基础

一:多层感知器模型 1:感知器 解释一下,为什么写成 wxb>0 ,其实原本是 wx > t ,t就是阈值,超过这个阈值fx就为1,现在把t放在左边。 在感知器里面涉及到两个问题: 第一个,特征提…

第十一章 图论

题目描述: 阿里这学期修了计算机组织和架构课程。他了解到指令之间可能存在依赖关系,比如WAR(读后写)、WAW、RAW。 如果两个指令之间的距离小于安全距离,则会导致危险,从而可能导致错误的结果。因此&#…

嵌入式系统 第七讲 ARM-Linux内核

• 7.1 ARM-Linux内核简介 • 内核:是一个操作系统的核心。是基于硬件的第一层软件扩充, 提供操作系统的最基本的功能,是操作系统工作的基础,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统, 决定着系统的…

win11蓝屏死机 TPM-WMI

1. 打开win11的事件查看器,定位错误 最近两次都是 KB5016061:安全启动数据库和 DBX 变量更新事件 - Microsoft 支持 事件源 TPM-WMI 事件 ID 1796 2. 解决方案 打开注册表:计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro…

Linux命令——3.网络与用户

文章目录 一、网络1.网络测试与诊断2.网络接口配置3.无线网络配置4.防火墙与网络管理6.防火墙管理1)firewalld命令2)iptables命令 二、用户和群组1.管理员模式2.用户账户管理1)useradd创建2)usermod修改3)userdel 删除…

机器学习算法基础知识1:决策树

机器学习算法基础知识1:决策树 一、本文内容与前置知识点1. 本文内容2. 前置知识点 二、场景描述三、决策树的训练1. 决策树训练方式(1)分类原则-Gini(2)分类原则-entropy(3)加权系数-样本量&am…

_使用CLion的Vcpkg安装SDL2,添加至CMakelists时报错,编译报错

语言:C20 编译器:gcc 14.2 摘要:初次使用Vcpkg添加SDL2,出现CMakelists找不到错误、编译缺失main错误、运行失败错误。 CMakelists缺失错误: 使用CLion的Vcpkg安装SDL2时,按照指示把对应代码添加至CMakel…

Lumos学习王佩丰Excel第二十二讲:制作甘特图与动态甘特图

一、制作双向条形图 1. 分离坐标轴 2. 自定义坐标轴数字格式:加分号加正常数字 3. 修改图表背景 修改图片艺术效果:虚化图片 二、制作甘特图 1、甘特图定义 甘特图(Gantt chart)又称为横道图、条状图(Bar chart&…

el-pagination 为什么只能展示 10 条数据(element-ui@2.15.13)

好的&#xff0c;我来帮你分析前端为什么只能展示 10 条数据&#xff0c;以及如何解决这个问题。 问题分析&#xff1a; pageSize 的值&#xff1a; 你的 el-pagination 组件中&#xff0c;pageSize 的值被设置为 10&#xff1a;<el-pagination:current-page"current…

【网络安全实验室】SQL注入实战详情

如果额头终将刻上皱纹&#xff0c;你只能做到&#xff0c;不让皱纹刻在你的心上 1.最简单的SQL注入 查看源代码&#xff0c;登录名为admin 最简单的SQL注入&#xff0c;登录名写入一个常规的注入语句&#xff1a; 密码随便填&#xff0c;验证码填正确的&#xff0c;点击登录…

ruoyi 多租户 开启后针对某一条sql不适用多租户; 若依多租户sql规则修改

文章参考&#xff1a;多租户功能 | Ruoyi-TDesign 忽略租户​ 1.如果需要指定单独 SQL 不开启过滤&#xff0c;可在对应的 Mapper 接口添加如下忽略注解&#xff1a; InterceptorIgnore(tenantLine "true", dataPermission "false") 此处注意事项 使…

一文理解条件竞争漏洞

视频教程在我主页简介或专栏里 目录&#xff1a; 理解竞争条件的基本概念 限制超越型竞争条件 使用 Burp Repeater 检测和利用限制超限竞态条件 方法论 1 — 预测潜在的冲突 2 — 线索 3 — 概念验证 如何防止竞态条件漏洞 理解竞争条件的基本概念 竞争条件(也就是条件竞…

一种基于动态部分重构的FPGA自修复控制器

1.FPGA动态部分重构技术 动态部分重构技术指在FPGA运行时&#xff0c;通过加载部分位流文件来修改FPGA可重构区域中的逻辑设计&#xff0c;修改过程中其余逻辑功能不受影响整个系统也能够持续运行。 下图为FPGA动态部分重构的基本原理图。通过下载A1.bit、A2.bit、A3.bit 或A4.…

计算机网络体系结构基础知识

一、计算机网络的两个目标&#xff1a; ①两台计算机之间通信 ②两台计算机之间的资源共享 二、计算机网络概述 1.定义&#xff1a;利用通信线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同 的形式连接起来&#xff0c;以功能完善的网络软件及协…

云计算学习架构篇之HTTP协议、Nginx常用模块与Nginx服务实战

一.HTTP协议讲解 1.1rsync服务重构 bash 部署服务端: 1.安装服务 [rootbackup ~]# yum -y install rsync 2.配置服务 [rootbackup ~]# vim /etc/rsyncd.conf uid rsync gid rsync port 873 fake super yes use chroot no max connections 200 timeout 600 ignore erro…

合合信息亮相CSIG AI可信论坛,全面拆解AI视觉内容安全的“终极防线”

合合信息亮相CSIG AI可信论坛&#xff0c;全面拆解视觉内容安全的“终极防线”&#xff01; &#x1f42f; AI伪造泛滥&#xff0c;我们还能相信“眼见为实”吗&#xff1f; 近期&#xff0c;由中国图象图形学学会主办的CSIG青年科学家会议 AI可信论坛在杭州成功举办。本次论…

AI 智能助手对话系统

一个基于 React 和 Tailwind CSS 构建的现代化 AI 对话系统&#xff0c;提供流畅的用户体验和丰富的交互功能。 项目链接&#xff1a;即将开放… 功能特点 &#x1f916; 智能对话&#xff1a;支持与 AI 助手实时对话&#xff0c;流式输出回答&#x1f4c1; 文件处理&#xff…

经验证:将数据从索尼传输到Android的 4 种方法

概括 像Android Galaxy S20 这样的新型Android智能手机很酷&#xff0c;但除了将数据从索尼传输到Android之外。众所周知&#xff0c;旧的索尼手机上存储着大量的文件&#xff0c;因此将数据从旧的索尼手机传输到新的Android手机非常重要。为了解决这个问题&#xff0c;我们做…

IDEA 搭建 SpringBoot 项目之配置 Maven

目录 1?配置 Maven 1.1?打开 settings.xml 文件1.2?配置本地仓库路径1.3?配置中央仓库路径1.4?配置 JDK 版本1.5?重新下载项目依赖 2?配置 idea 2.1?在启动页打开设置2.2?配置 Java Compiler2.3?配置 File Encodings2.4?配置 Maven2.5?配置 Auto Import2.6?配置 C…

走方格(蓝桥杯2020年试题H)

【问题描述】在平面上有一些二维点阵。这些点的编号就像二维数组的编号一样&#xff0c;从上到下依次为第1~n行&#xff0c;从左到右依次为第1~m列&#xff0c;每个点可以用行号和列号表示。 现在有个人站在第1行第1列&#xff0c;他要走到第n行第m列&#xff0c;只能向右或者向…