返回顶部
首页 > 资讯 > 精选 >Spark里的闭包是什么
  • 582
分享到

Spark里的闭包是什么

2023-06-19 11:06:18 582人浏览 泡泡鱼
摘要

本篇内容主要讲解“spark里的闭包是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spark里的闭包是什么”吧!闭包的概念如下图:在spark应用里,变量及函数的作用范围和声明周期在spa

本篇内容主要讲解“spark里的闭包是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spark里的闭包是什么”吧!

闭包的概念如下图:

Spark里的闭包是什么

在spark应用里,变量及函数的作用范围和声明周期在spark的集群运行模式下是比较难理解的,尤其是对初学者来说。RDD的操作,要修改其作用范围的变量,经常会出点叉子。下面,可以举个用foreach,修改一个计数器的例子。

例子

求和RDD元素的例子,该例子会根据该段代码是否执行在同一个JVM里面有不同的输出结果,比如local模式,运行于同一个jvm,输出是15;cluster模式运行于不同jvm输出是0。

val data = Array(1, 2, 3, 4, 5)

var counter = 0

var rdd = sc.parallelize(data)

// Wrong: Don't do this!!

rdd.foreach(x => counter += x)

println("Counter value: " + counter)

本地或集群模式

上述代码的行为是未定义的,并且不同模式下运行情况不同。为了执行作业,Spark将RDD操作的处理分解为tasks,每个task由Executor执行。在执行之前,Spark会计算task的闭包。闭包是Executor在RDD上进行计算的时候必须可见的那些变量和方法(在这种情况下是foreach())。闭包会被序列化并发送给每个Executor。

发送给每个Executor的闭包中的变量是副本,因此,当foreach函数内引用计数器时,它不再是driver节点上的计数器。driver节点的内存中仍有一个计数器,但该变量是Executor不可见的!执行者只能看到序列化闭包的副本。因此,计数器的最终值仍然为零,因为计数器上的所有操作都引用了序列化闭包内的值。

在本地模式下,在某些情况下,该foreach函数实际上将在与driver相同的JVM内执行,并且会引用相同的原始计数器,并可能实际更新它。

为了确保在这些场景中明确定义的行为,应该使用一个Accumulator。Spark中的累加器专门用于提供一种机制,用于在集群中的工作节点之间执行拆分时安全地更新变量。

一般来说,closures - constructs像循环或本地定义的方法,不应该被用来改变一些全局状态。Spark并没有定义或保证从闭包外引用的对象的改变行为。这样做的一些代码可以在本地模式下工作,但这只是偶然,并且这种代码在分布式模式下的行为不会像你想的那样。如果需要某些全局聚合,请改用累加器。

打印RDD的元素

另一个常见的习惯用法是尝试使用rdd.foreach(println)或rdd.map(println)打印出RDD的元素。在单台机器上,这将产生预期的输出并打印所有RDD的元素。但是,在cluster模式下,由Executor执行输出写入的是Executor的stdout,而不是driver上的那个stdout,所以driver的stdout不会显示这些!要在driver中打印所有元素,可以使用该collect()方法首先将RDD数据带到driver节点:rdd.collect().foreach(println)。但这可能会导致driver程序内存不足,因为collect()会将整个RDD数据提取到driver端; 如果您只需要打印RDD的一些元素,则更安全的方法是使用take():rdd.take(100).foreach(println)。

到此,相信大家对“Spark里的闭包是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Spark里的闭包是什么

本文链接: https://lsjlt.com/news/295711.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Spark里的闭包是什么
    本篇内容主要讲解“Spark里的闭包是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spark里的闭包是什么”吧!闭包的概念如下图:在spark应用里,变量及函数的作用范围和声明周期在spa...
    99+
    2023-06-19
  • JavaScript闭包是什么
    这篇文章给大家分享的是有关JavaScript闭包是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。概论在讨论ECMAScript闭包之前,先来介绍下函数式编程(与ECMA-2...
    99+
    2024-04-02
  • 什么是JavaScript闭包
    本篇内容主要讲解“什么是JavaScript闭包”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是JavaScript闭包”吧!什么是闭包简言之,闭包是由函数...
    99+
    2024-04-02
  • Scala闭包是什么
    这篇文章主要介绍“Scala闭包是什么”,在日常操作中,相信很多人在Scala闭包是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Scala闭包是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!闭包...
    99+
    2023-06-02
  • JavaScript中什么是闭包
    这篇文章给大家介绍JavaScript中什么是闭包,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 一 、词法定义域 LexicalClosure闭包是编程语言Lexical ...
    99+
    2024-04-02
  • Javascript闭包的作用是什么
    本篇内容主要讲解“Javascript闭包的作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Javascript闭包的作用是什么”吧!对于初学者来说,理...
    99+
    2024-04-02
  • Javascript闭包的特性是什么
    本篇内容介绍了“Javascript闭包的特性是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java...
    99+
    2024-04-02
  • javascript中什么指的是闭包
    这篇文章主要为大家展示了“javascript中什么指的是闭包”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“javascript中什么指的是闭包”这篇文章吧。 ...
    99+
    2024-04-02
  • jquery闭包的概念是什么
    这篇文章主要讲解了“jquery闭包的概念是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“jquery闭包的概念是什么”吧! ...
    99+
    2024-04-02
  • javascript的闭包是什么意思
    这篇文章将为大家详细讲解有关javascript的闭包是什么意思,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 在javascript中,当两...
    99+
    2024-04-02
  • python闭包的功能是什么
    本篇内容主要讲解“python闭包的功能是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python闭包的功能是什么”吧!说明闭包可以避免使用全局变量,并提供某种形式的变量私有,即提供面向对...
    99+
    2023-06-20
  • python闭包的作用是什么
    Python闭包的作用是将函数和其相关的引用变量封装在一个包裹(closure)中,以便在函数外部访问这些变量。具体而言,闭包允许函...
    99+
    2023-10-11
    python
  • golang闭包的概念是什么
    闭包是指一个函数值(函数的指针)与其引用的其环境变量(值)的组合,形成了一个整体。换句话说,闭包是一个包含自由变量(在函数中使用,但...
    99+
    2023-10-20
    golang
  • JS闭包到底是什么
    这篇文章主要讲解了“JS闭包到底是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS闭包到底是什么”吧!  在JavaScript这...
    99+
    2024-04-02
  • Python闭包技巧是什么
    这篇文章主要讲解了“Python闭包技巧是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python闭包技巧是什么”吧!1.闭包:用函数代替类有时我们会定义只有一个方法(除了__init...
    99+
    2023-06-21
  • JavaScript闭包是什么意思
    本篇内容介绍了“JavaScript闭包是什么意思”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!闭包是纯函数式编程语言的传统特性之一。通过将...
    99+
    2023-06-20
  • python中闭包的概念是什么
    闭包是指在一个函数内部定义的函数,并且内部函数可以访问外部函数的局部变量。具体来说,闭包是由函数对象和其引用环境组合而成的实体。 闭...
    99+
    2023-10-27
    python
  • Spark中的Executor是什么
    在Spark中,Executor是运行在集群节点上的工作进程,负责执行应用程序的任务。每个Executor会被分配一定量的内存和CP...
    99+
    2024-03-05
    Spark
  • javascript消除闭包的方法是什么
    本篇内容主要讲解“javascript消除闭包的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript消除闭包的方法是什么”吧!说明闭包中的一个关键问题是函数内的函数可以被...
    99+
    2023-06-20
  • JavaScript闭包是什么及怎么用
    这篇“JavaScript闭包是什么及怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JavaScript闭包是什么及怎...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作