热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

spark闭包理解

在spark应用中,在处理函数,变量的作用范围和生命周期需要十分的注意特别是在spark集群模式下。比如如下的模式在rdd的操作中修改变量的值。下面举一个例子rdd求

在spark 应用中,在处理函数,变量的作用范围和生命周期需要十分的注意特别是在spark集群模式下。比如如下的模式在rdd的操作中修改变量的值。
下面举一个例子
rdd 求和,比如下面一段代码,在看起来结果像是45,但是实际上是0

var sc = new SparkContext(new SparkConf().setMaster("local"))val array=Array(1,2,3,4,5,6,7,8,9)var test=new Testvar rddArray=sc.parallelize(array)rddArray.foreach(i=>{test.sum=test.sum+i;println(test.sum)})println("sum:"+test.sum)

上述代码的行为是未定义的,并且不同模式下运行的情况不一样,为了执行作业,Spark 将RDD 操作分解成tasks,每个task 由executor 执行。在执行之前spark 会计算task 的闭包。闭包是Executor 在RDD 上进行计算的时候必须可见的那些变量和方法。闭包会被序列化成并发送给每个executor 。发送给每个Executor 的闭包的变量是副本。因此在foreach 函数悲剧引用计数器的时候他操作的不是driver 节点上面的对象,执行者只能看到序列化闭包的副本,所以最终值并没有改变。
为了如果要实现上面的功能可以使用Accumerlator 。spark 中累加专门用于提供的一种机制,用于集群工作之间安全的更新变量
另一种方式就是使用collect 但是这可能会导致driver 内存不足, 更安全的使用take 的方式。

欢迎关注,更多惊喜等着你

这里写图片描述


推荐阅读
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • 深入解析C#中app.config文件的配置与修改方法
    在C#开发过程中,经常需要对系统的配置文件进行读写操作,如系统初始化参数的修改或运行时参数的更新。本文将详细介绍如何在C#中正确配置和修改app.config文件,包括其结构、常见用法以及最佳实践。此外,还将探讨exe.config文件的生成机制及其在不同环境下的应用,帮助开发者更好地管理和维护应用程序的配置信息。 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 作为软件工程专业的学生,我深知课堂上教师讲解速度之快,很多时候需要课后自行消化和巩固。因此,撰写这篇Java Web开发入门教程,旨在帮助初学者更好地理解和掌握基础知识。通过详细记录学习过程,希望能为更多像我一样在基础方面还有待提升的学员提供有益的参考。 ... [详细]
  • 本文详细介绍了在C#编程环境中绘制正方形图像的技术和实现方法,通过具体示例代码帮助读者理解和掌握相关技巧。内容涵盖从基础概念到实际应用的各个方面,适合初学者和有一定经验的开发者参考。希望对您的C#学习之旅有所帮助,并激发您进一步探索的兴趣。 ... [详细]
  • 投融资周报 | Circle 达成 4 亿美元融资协议,唯一艺术平台 A 轮融资超千万美元 ... [详细]
  • 在本文中,我们将详细介绍如何构建一个用于自动回复消息的XML类。当微信服务器接收到用户消息时,该类将生成相应的自动回复消息。以下是具体的代码实现:```phpclass We_Xml { // 代码内容}```通过这个类,开发者可以轻松地处理各种消息类型,并实现高效的自动回复功能。我们将深入探讨类的各个方法和属性,帮助读者更好地理解和应用这一技术。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 在本任务中,我们将深入探讨数据重塑的技巧及其实际应用,特别是在处理复杂数据集时。通过使用泰坦尼克号数据集,我们将展示如何利用数据聚合和运算来计算男性和女性乘客的平均票价。具体来说,我们将编写代码以实现这一目标,并通过 `groupby` 方法对数据进行分组和统计分析,从而获得更深入的洞察。此外,我们还将介绍其他相关技术,如数据透视表和多级索引,以提升数据处理的效率和准确性。 ... [详细]
  • Python 开发指南:深入理解高级变量类型与函数进阶应用
    Python 开发指南:深入理解高级变量类型与函数进阶应用 ... [详细]
  • 开发日志:201521044091 《Java编程基础》第11周学习心得与总结
    开发日志:201521044091 《Java编程基础》第11周学习心得与总结 ... [详细]
  • 在Android开发中,BroadcastReceiver(广播接收器)是一个重要的组件,广泛应用于多种场景。本文将深入解析BroadcastReceiver的工作原理、应用场景及其具体实现方法,帮助开发者更好地理解和使用这一组件。通过实例分析,文章详细探讨了静态广播的注册方式、生命周期管理以及常见问题的解决策略,为开发者提供全面的技术指导。 ... [详细]
  • MyISAM和InnoDB是MySQL中最为广泛使用的两种存储引擎,每种引擎都有其独特的优势和适用场景。MyISAM引擎以其简单的结构和高效的读取速度著称,适用于以读操作为主、对事务支持要求不高的应用。而InnoDB引擎则以其强大的事务处理能力和行级锁定机制,在需要高并发写操作和数据完整性的场景下表现出色。选择合适的存储引擎应综合考虑业务需求、性能要求和数据一致性等因素。 ... [详细]
  • 在第二课中,我们将深入探讨Scala的面向对象编程核心概念及其在Spark源码中的应用。首先,通过详细的实战案例,全面解析Scala中的类和对象。作为一门纯面向对象的语言,Scala的类设计和对象使用是理解其面向对象特性的关键。此外,我们还将介绍如何通过阅读Spark源码来进一步巩固对这些概念的理解。这不仅有助于提升编程技能,还能为后续的高级应用开发打下坚实的基础。 ... [详细]
author-avatar
佳华雅惠妤坚
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有