当前位置: 首页 > news >正文

网站建设的成功之处有哪些百度旗下有哪些app

网站建设的成功之处有哪些,百度旗下有哪些app,seo兼职招聘信息,淘宝店铺运营序列化 Spark是基于JVM运行的进行,其序列化必然遵守Java的序列化规则。 序列化就是指将一个对象转化为二进制的byte流(注意,不是bit流),然后以文件的方式进行保存或通过网络传输,等待被反序列化读取出来。…

序列化

Spark是基于JVM运行的进行,其序列化必然遵守Java的序列化规则。

序列化就是指将一个对象转化为二进制的byte流(注意,不是bit流),然后以文件的方式进行保存或通过网络传输,等待被反序列化读取出来。序列化常被用于数据存取和通信过程中

spark dirver和executor间传递变量,默认需要进行序列化,才能传递。不序列话的成员,可以通过添加@transientlazy标识。

在spark中4个地方用到了序列化:

  1. 算子中用到了driver定义的外部变量的时候
  2. 将自定义的类型作为RDD的泛型类型,所有的自定义类型对象都会进行序列化
  3. 使用可序列化的持久化策略的时候。比如:MEMORY_ONLY_SER,spark会将RDD中每个分区都序列化成一个大的字节数组。
  4. shuffle的时候

序列化的方法:

  1. 类继承scala.Serializable
  2. 使用case class修饰类,case class默认实现了序列化

transient 和 lazy

scala 中@transient 是 java 的 transient 关键字的作用,是需要实现 Serilizable 接口,@transient
是类型修饰符,只能用来修饰字段。在对象序列化过程中, 被 transient 标记的变量不会被序列化

transient使用小结
1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。(spark中反序列化后还可以访问吗?可以,但读到的是null。加上lazy才能访问到具体的值。)

2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。

3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。

@transient修饰符的lazy val的区别:

lazy val是一个懒加载的不可变值,在第一次访问时才会被计算并缓存起来,且只计算一次。而@transient修饰符则可以用来标记某些字段在序列化时忽略。

示例1:

class A(val a: Int)def compute(rdd: RDD[Int]) = {// lazy val instance = {@transient lazy val instance = {println("in lazy object")new A(1)}val res = rdd.map(instance.a + _).count()println(res)
}compute(sc.makeRDD(1 to 100, 8))

如果在driver端不使用instance,那么@transient 不是必须的,序列化会发生,这时候序列化的instance 为null。
在executor处使用的时候,才真正创建instance。

如果在driver端先使用了instance,那么@transient 是必须的。

示例2

 test("序列化") {class A(a: String) extends Serializable {@transient val name = alazy val nanme2 = aval nanme3 = a@transient lazy val name4 = a}val sc = SparkSession.builder().enableHiveSupport().master("local").appName("JoinTest").getOrCreate()import sc.sqlContext.implicits._val a = new A("张三")val res = Seq("ddd").toDF("c1").map {x =>(a.name, a.nanme2, a.nanme3, a.name4)}.toDF("a", "b", "c", "d").show()}+----+----+----+----+
|   a|   b|   c|   d|
+----+----+----+----+
|null|张三|张三|张三|
+----+----+----+----+

可以看到,不序列化的,在executor端读到的是null。

参考

Spark 序列化和kryo序列化器详解
Scala的序列化,Serialization以及SerialVersionUID
Spark序列化
Java transient关键字使用小记
Scala 序列化带有或不带有@transient修饰符的lazy val的区别
Scala and the ‘@transient lazy val’ pattern
Difference when serializing a lazy val with or without @transient

http://www.yayakq.cn/news/340268/

相关文章:

  • 优质高职院建设网站平面设计公司赚钱吗
  • 空调安装工做网站什么叫展示型网站
  • 企业服务网站建设广东seo点击排名软件哪里好
  • 企业管理咨询经营范围做站群网站好优化吗
  • 福建省新特建设工程有限公司网站wordpress安装到万网
  • 优秀企业网站设计欣赏做网站的怎么跑业务
  • 做网站是找什么人电子商务网站 技术方案
  • 网站管理员怎样管理商城小程序介绍
  • 展示型网站首页设计解析网畅学校网站管理系统
  • 体育直播网站开发数据源获取微梦网站建设
  • 做网站给源码吗租号网站怎么做的
  • 做微课的网站有哪些深圳网络推广建站
  • 长沙专业的网站设计专业订制网站制作
  • 孝感 网站建设公众号文章排版编辑器
  • 网站建设默认字体国家新闻大事最近
  • 网站建设中提示页面网站用哪些系统做的好处
  • 公司网站建设费用会计科目猎头公司人才招聘
  • 中国广告网站上海开展扫黄打非专项检查
  • html5怎么做简单的网站泰安网站建设招聘
  • 做pc网站最大分辨率重庆万州网站建设哪家好
  • 广州优化网站推广学建网站 必须学那些知识
  • 制作app需要网站吗上市公司网站维护
  • 给菠菜网站做支付dede 中英文网站
  • 网站找百度做可以嘛网站建设的技术有哪些内容
  • vps做网站又拍云wordpress远程附件
  • 导航网站后台源码客户关系管理系统的特点
  • 手机网站开发基础删除wordpress首页链接
  • wordpress 多站点主题盐城网站建设有限公司
  • aso优化的主要内容湖南企业seo优化推荐
  • 合肥建设集团招聘信息网站二级网站建设与管理会议