高级特性_闭包_Spark 闭包分发 | 学习笔记

简介: 快速学习 高级特性_闭包_Spark 闭包分发

开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段高级特性_闭包_Spark 闭包分发】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/689/detail/12030


高级特性_闭包_Spark 闭包分发


内容简介

一、闭包分发

二、要点

 

这节我们继续了解 spark 中的闭包,为什么要说闭包的概念,很重要的概念,通过本节的学习就能去规避经常会出现的 bug,理解 dirver 是怎样分发任务的。

 

一、闭包分发

1.sc.textfile(“dataset/access_log_sample.text)  //通过 textfile 读取文件

.flatmap(item => item.split(“”))   // flatmap 进行文件处理 括号内函数每个分区就代表一个 task,函数所代表的 task 会被分发到不同的 executor 中,task 会被分发到不同的节点去执行。

image.png

2.item => item.split(“”)函数是闭包,闭包只有在封闭了外部作用域的时候,函数才被称为闭包

.collect() // collect 收集

Class Myclass

Val field = hello

Def dostuffrddRDDstring]):RDD[string] = {

Rdd.map(x => field + x)// 函数

}

3.Dostuff 方法中,RDD 进行了 map

(x => field + x)函数中,引用了 myclass 对象中的一个成员变量,说明其可以访问 myclass 这个类的作用域,也是一个闭包,封闭的是 myclass 这个作用域

这个函数可以访问 myclass 的作用域,说明闭包是一个封闭的 myclass 的作用域。

image.png

将闭包实例分发到不同 executor 中执行的时候,其依赖类 myclass 这个类当前的对象,因为其封闭了这个作用域。Myclass 和函数都要一起被序列化,分发到不同的节点执行。

问题:如果 myclass 不能被序列化,将会报错

问题:如果在这个闭包中,依赖类一个外部很大的集合,那么这个集合会随着一个 task 分发。可以理解为,其依赖的外部的数据,都会被复制很多份。


二、要点

1.一个函数如果在另一个函数中定义,那么这个函数中依赖了外部的一个变量,那么这个函数就要去持有外部类的对象(作用域),这样我们称函数为闭包

2. spark 数据中,算子所传入的函数中,包含了外部的变量,变量和类会随着 task 一起被序列化,分发到不同的 executor 中执行,外部依赖有多少 task,就会被复制多少份。

相关文章
|
6月前
|
机器学习/深度学习 分布式计算 API
技术好文:Spark机器学习笔记一
技术好文:Spark机器学习笔记一
47 0
|
分布式计算 大数据 Spark
Spark 原理_总体介绍_物理执行图 | 学习笔记
快速学习 Spark 原理_总体介绍_物理执行图
119 0
Spark 原理_总体介绍_物理执行图 | 学习笔记
|
分布式计算 大数据 数据处理
Spark 原理_总体介绍_逻辑执行图 | 学习笔记
快速学习 Spark 原理_总体介绍_逻辑执行图
127 0
Spark 原理_总体介绍_逻辑执行图 | 学习笔记
|
分布式计算 大数据 调度
Spark 原理_总体介绍_集群环境 | 学习笔记
快速学习 Spark 原理_总体介绍_集群环境
Spark 原理_总体介绍_集群环境 | 学习笔记
|
分布式计算 大数据 Spark
Spark 原理_总体介绍_概要 | 学习笔记
快速学习 Spark 原理_总体介绍_概要
Spark 原理_总体介绍_概要 | 学习笔记
|
分布式计算 Hadoop 大数据
Spark 原理_总结介绍_案例编写 | 学习笔记
快速学习 Spark 原理_总结介绍_案例编写
122 0
Spark 原理_总结介绍_案例编写 | 学习笔记
|
分布式计算 大数据 调度
Spark 原理_运行过程_总结和流程 | 学习笔记
快速学习 Spark 原理_运行过程_总结和流程
116 0
Spark 原理_运行过程_总结和流程 | 学习笔记
|
缓存 分布式计算 Hadoop
Spark 原理_运行过程_概念介绍 | 学习笔记
快速学习 Spark 原理_运行过程_概念介绍
133 0
Spark 原理_运行过程_概念介绍 | 学习笔记
|
存储 分布式计算 大数据
Spark 原理_运行过程_stage 和 task 的关系 | 学习笔记
快速学习 Spark 原理_运行过程_stage 和 task 的关系
214 0
Spark 原理_运行过程_stage 和 task 的关系 | 学习笔记
|
1月前
|
分布式计算 大数据 Apache
ClickHouse与大数据生态集成:Spark & Flink 实战
【10月更文挑战第26天】在当今这个数据爆炸的时代,能够高效地处理和分析海量数据成为了企业和组织提升竞争力的关键。作为一款高性能的列式数据库系统,ClickHouse 在大数据分析领域展现出了卓越的能力。然而,为了充分利用ClickHouse的优势,将其与现有的大数据处理框架(如Apache Spark和Apache Flink)进行集成变得尤为重要。本文将从我个人的角度出发,探讨如何通过这些技术的结合,实现对大规模数据的实时处理和分析。
131 2
ClickHouse与大数据生态集成:Spark & Flink 实战