spark学习-54-Spark RDD的clean()方法
来源:互联网 发布:网络安全工程师招聘 编辑:程序博客网 时间:2024/06/11 05:36
spark里面,大量使用了一个方法, ClosureCleaner.clean()
// 这里调用了SparkContext的clean方法 // clean方法实际上调用了ClosureCleaner的clean方法,这里一再清除闭包中的不能序列化的变量,防止RDD在网络传输过程中反序列化失败。 val cleanF = sc.clean(f)
private[spark] def clean[F <: AnyRef](f: F, checkSerializable: Boolean = true): F = { // clean方法实际上调用了ClosureCleaner的clean方法,这里一再清除闭包中的不能序列化的变量,防止RDD在网络传输过程中反序列化失败。 ClosureCleaner.clean(f, checkSerializable) f }
def clean( closure: AnyRef, checkSerializable: Boolean = true, cleanTransitively: Boolean = true): Unit = { // 直接就是调用下面的方法 clean(closure, checkSerializable, cleanTransitively, Map.empty) }
quora上有一篇参考文章 https://www.quora.com/What-does-Closure-cleaner-func-mean-in-Spark
大概意思,scala支持闭包(jvm上的闭包当然也是一个对像),闭包会把它对外的引用(闭包里面引用了闭包外面的对像)保存到自己内部,
这个闭包就可以被单独使用了,而不用担心它脱离了当前的作用域;
但是在spark这种分布式环境里,这种作法会带来问题,如果对外部的引用是不可serializable的,它就不能正确被发送到worker节点上去了;
还有一些引用,可能根本没有用到,这些没有使用到的引用是不需要被发到worker上的; ClosureCleaner.clean()就是用来完成这个事的;
ClosureCleaner.clean()通过递归遍历闭包里面的引用,检查不能serializable的, 去除unused的引用;
这个方法在SparkContext中用得很多,对rpc方法,只要传入的是闭包,基本都会使用这个方法,它可以降低网络io,提高executor的内存效率
csdn:http://www.jianshu.com/p/51f5a34e2785
csdn:http://www.cnblogs.com/ivanny/p/spark_ClosureCleaner_clean_function.html
阅读全文
0 0
- spark学习-54-Spark RDD的clean()方法
- 学习Spark RDD
- spark-RDD学习
- spark中RDD的方法整理
- 学习spark:二、RDD的Transformations操作
- 学习spark:三、RDD的action操作
- Spark学习笔记 --- RDD的创建
- Spark学习之RDD的概念
- 学习Spark──理解Spark的核心RDD
- Spark RDD系列----3. rdd.coalesce方法的作用
- spark RDD的理解
- 理解Spark的RDD
- spark RDD的原理
- Spark RDD的转换
- Spark RDD的动作
- spark RDD的理解
- Spark RDD的理解
- 理解Spark的RDD
- Android视频渲染: YUV转RGB
- Java homework 10
- 纯css选项卡及下拉菜单
- Java应用OpenvCV指南其六:利用OpenCV实现的数字识别(验证码识别)
- javascript编程习惯和问题
- spark学习-54-Spark RDD的clean()方法
- 模板
- 重复造轮子-C语言风格string库函数的实现
- 1407 用两种方法对IPV6地址进行压缩的c程序实现
- C语言动态数组建立方法
- 阿里巴巴Java开发手册学习小结3-OOP规约
- leetcode 415. Add Strings 字符串加法
- 求助!!!!急!!!
- Tomcat 日志分割.