大数据开发-Spark-闭包的理解

本文介绍了闭包的概念,从Scala的角度阐述了闭包的定义,并通过示例解释了其工作机制。接着讨论了Spark中闭包的作用,包括如何影响RDD操作的执行,以及在序列化和任务分配过程中的重要性。最后,总结了闭包在Spark生命周期中的关键角色,并提醒读者在使用DataSet时注意闭包的影响。
摘要由CSDN通过智能技术生成

1.从Scala中理解闭包

闭包是一个函数,返回值依赖于声明在函数外部的一个或多个变量。闭包通常来讲可以简单的认为是可以访问一个函数里面局部变量的另外一个函数。

如下面这段匿名的函数:

val multiplier = (i:Int) => i * 10  

函数体内有一个变量 i,它作为函数的一个参数。如下面的另一段代码:

val multiplier = (i:Int) => i * factor

multiplier中有两个变量:i 和 factor。其中的一个 i 是函数的形式参数,在 multiplier函数被调用时,i 被赋予一个新的值。然而,factor不是形式参数,而是自由变量,考虑下面代码:

var factor = 3  val multiplier = (i:Int) => i * factor 

这里我们引入一个自由变量 factor,这个变量定义在函数外面。

这样定义的函数变量 multiplier成为一个"闭包",因为它引用到函数外面定义的变量,定义这个函数的过程是将这个自由变量捕获而构成一个封闭的函数

完整的例子:

object Test {  
   def main(args: Array[String]) {  
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值