2 serialization scala apache-spark apache-spark-dataset
如果我有一个数据集,每个记录的每个记录都是一个案例类,那么我按如下所示保留该数据集,以便使用序列化:
myDS.persist(StorageLevel.MERORY_ONLY_SER)
Run Code Online (Sandbox Code Playgroud)
Spark是否使用Java / kyro序列化序列化数据集?还是像数据框一样,Spark有自己的数据存储方式?
Spark Dataset不使用标准的序列化器。相反,它使用Encoders来“理解”数据的内部结构,并且可以将对象(Encoder包括在内的任何对象)有效地转换Row为内部二进制存储。
使用Kryo或Java序列化的唯一情况是显式应用 Encoders.kryo[_]或Encoders.java[_]。在任何其他情况下,Spark都会破坏对象表示的结构,并尝试应用标准编码器(原子编码器,Prodcuct编码器等)。相比,唯一的区别Row是Encoder- RowEncoder(在某种意义上Encoders与镜头相似)。
Databricks 在其Apache Spark数据集简介中明确地将Encoder/ Dataset序列化与Java和Kryo序列化器进行了对比(尤其是对于 使用编码器的快速闪电序列化部分)
图片来源
小智 3
Dataset[SomeCaseClass]Dataset[Row]与或任何其他没有什么不同Dataset。它使用相同的内部表示(需要时映射到外部类的实例)和相同的序列化方法。
因此,不需要直接对象序列化(Java、Kryo)。
| 归档时间: |
|
| 查看次数: |
3068 次 |
| 最近记录: |