【问题标题】:What is the overview of serialization in SparkSpark中序列化的概述是什么
【发布时间】:2020-04-27 01:20:00
【问题描述】:

也许对 Spark 有更多经验的人可以帮助解决以下与序列化相关的问题::)

以下是否是对 Spark 中发生的序列化路径之一的准确描述:

  • RDD --> Bytestream (Java/Kryo)
  • Dataset --> Bytestream (Encoders)

在这个talk 关于RDDDataframeDataset 在spark 中,据说RDD 仍然是Spark 中发挥作用的基本数据结构,因此甚至Datasets 都建立在RDD

该语句应该如何解释?是不是表示Dataset的序列化路径是:

Dataset -->(encoders) RDD --> Bytestream(Java/kryo)

或者编码器是否也可以将 RDD 转换为字节流?

【问题讨论】:

  • 这是一个巨大的话题。一个简单的概述是 RDD:s 使用普通的 java 对象。数据集 API(及其别名数据框)使用 tungsten,它的第一个化身使用专有的二进制行格​​式,第二代正在迁移到矢量化列格式。一个简短的解释spoddutur.github.io/spark-notes/…

标签: scala apache-spark


【解决方案1】:

首先,RDDDataset 都没有作为一个整体进行序列化。正确的说法是在RDD[T]Dataset[T] 中,T 类型的每个元素都被序列化了。

Dataset 建立在RDDs 上的声明意味着Dataset 只是为了方便和优化的抽象。并且每当触发对 Dataset 的计算时 - 在应用优化后,Datasets 转换将转换为 RDD 转换。

我不能确定它在 spark 中究竟是如何工作的——可能只有写过这个的开发人员才能回答这个问题,或者可以花一些时间研究 spark 源的人,但假设是,如果我们有 Dataset[T] 的转换:

  1. 只要数据存储在任何地方 - 它都使用Encoders 进行编码
  2. 转换图基于 RDD[Array[Byte]],因为 1。

Dataset[T] --(encoders)--> RDD[Array[Byte]]

希望有帮助!

【讨论】:

    猜你喜欢
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 2011-03-20
    • 2013-05-15
    • 2015-05-10
    相关资源
    最近更新 更多