gpt4 book ai didi

apache-spark - 为什么序列化的持久化 RDD 比反序列化的持久化 RDD 占用更少的内存

转载 作者:行者123 更新时间:2023-12-03 17:42:47 26 4
gpt4 key购买 nike

我读到,当 RDD 通过某种序列化(无论是默认的 Java 序列化还是 Kryo 序列化之类的东西)持久保存在内存中时,它在内存中占用的空间更少。我对序列化的理解是,它只是将内存中的Java对象转换为一系列位的一种方式,而反序列化实际上是流程 将这些位作为对象带入内存。所以我一直认为反序列化为 带回来从一系列位元中作为对象内存。因此,将某些内容存储为反序列化数据的术语让我感到困惑。对我来说,存储(作为一系列位)是序列化,而检索是反序列化。所以我真的无法想象将某些东西存储为反序列化数据意味着什么。正因为如此,我也无法理解为什么序列化表单在缓存中占用的空间更少。在我看来,反序列化/序列化不仅仅是转储对象并将它们取回,但我不知道是什么,并且完全想理解这一点。是因为序列化格式真的是某种压缩格式吗?并且反序列化格式没有任何压缩?据我所知,在 Java 编程中,我从未遇到过将对象存储为反序列化格式的概念。当我们提到存储时,任何 Java 文章都会立即开始讨论序列化和反序列化,它只在读取并将其作为对象返回的上下文中进行讨论。

最佳答案

我自己想出了答案,所以想发布它,因为它可能会帮助有类似困惑的人。

“存储为反序列化对象”的整个困惑是由我所指的特定书籍中解释它的方式引起的。

Spark要么将RDD作为Java对象缓存在内存中,因为RDD只是某个类(某个RDD类)的另一个对象,或者它将它写入磁盘,当它写入磁盘时,它被序列化(在Java/Scala的情况下,使用默认的 Java 序列化,在 Python 的情况下,使用 python 的“pickle”模块来序列化它)。这就是它的全部。因此,每当我们谈论“反序列化”RDD 时,我们总是指的是内存中的 RDD。理想情况下,他们应该将其称为非序列化而不是反序列化,以避免混淆,但无论如何。序列化的 RDD 总是指写入(缓存)到磁盘的内容。

关于apache-spark - 为什么序列化的持久化 RDD 比反序列化的持久化 RDD 占用更少的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31984448/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com