为什么序列化持久化RDD比反序列化持久化RDD占用内存少
why serialized persisted RDD is occupies less memory than deserialized persisted RDD
我读到,当一个 RDD 通过某种序列化(无论是默认 Java 序列化还是 Kryo 序列化之类的东西)持久化在内存中时,它在内存中占用的 space 较少。我对序列化的理解是,它只是一种将内存中的Java对象转换为一系列位的方法,而反序列化实际上是将这些位带入内存的过程作为一个对象。所以我一直认为反序列化是 将 带回内存作为来自一系列位的对象。因此,将某些东西存储为反序列化数据这一术语让我感到困惑。对我来说,存储(作为一系列位)是序列化,检索是反序列化。所以我真的无法想象将某些东西存储为反序列化数据意味着什么。因此,我也无法理解为什么序列化形式在缓存中占用的 space 较少。在我看来,de/serialization 不仅仅是倾倒对象并将它们取回,但我不知道是什么,并且非常想了解这一点。是因为序列化格式真的是某种压缩格式吗?反序列化格式没有任何压缩?据我所知,在 Java 编程中,我从未遇到过将对象存储为反序列化格式的概念。当我们提到存储时,任何 Java 文章都会立即开始谈论序列化和反序列化,它只在读取和将其作为对象带回的上下文中谈论。
我自己找到了答案,所以想把它贴出来,因为它可能会帮助有类似困惑的人。
'storing as deserialized object' 的整个混乱是由我所指的特定书中解释它的方式引起的。
Spark 要么将 RDD 作为 Java 对象缓存在内存中,因为 RDD 只是某些 class(某些 RDD class)的另一个对象,或者将其写入磁盘,并且当它写入磁盘时,它被序列化(在 Java/Scala 的情况下,使用默认的 Java 序列化,在 Python、python 的情况下 'pickle'模块用于序列化它)。所以这就是它的全部。所以每当我们谈论 'deserialized' RDD 时,我们总是指内存中的 RDD。理想情况下,他们应该将其称为非序列化而不是反序列化,以避免混淆,但无论如何。序列化的 RDD 总是指的是写入(缓存)到磁盘的内容。
我读到,当一个 RDD 通过某种序列化(无论是默认 Java 序列化还是 Kryo 序列化之类的东西)持久化在内存中时,它在内存中占用的 space 较少。我对序列化的理解是,它只是一种将内存中的Java对象转换为一系列位的方法,而反序列化实际上是将这些位带入内存的过程作为一个对象。所以我一直认为反序列化是 将 带回内存作为来自一系列位的对象。因此,将某些东西存储为反序列化数据这一术语让我感到困惑。对我来说,存储(作为一系列位)是序列化,检索是反序列化。所以我真的无法想象将某些东西存储为反序列化数据意味着什么。因此,我也无法理解为什么序列化形式在缓存中占用的 space 较少。在我看来,de/serialization 不仅仅是倾倒对象并将它们取回,但我不知道是什么,并且非常想了解这一点。是因为序列化格式真的是某种压缩格式吗?反序列化格式没有任何压缩?据我所知,在 Java 编程中,我从未遇到过将对象存储为反序列化格式的概念。当我们提到存储时,任何 Java 文章都会立即开始谈论序列化和反序列化,它只在读取和将其作为对象带回的上下文中谈论。
我自己找到了答案,所以想把它贴出来,因为它可能会帮助有类似困惑的人。
'storing as deserialized object' 的整个混乱是由我所指的特定书中解释它的方式引起的。
Spark 要么将 RDD 作为 Java 对象缓存在内存中,因为 RDD 只是某些 class(某些 RDD class)的另一个对象,或者将其写入磁盘,并且当它写入磁盘时,它被序列化(在 Java/Scala 的情况下,使用默认的 Java 序列化,在 Python、python 的情况下 'pickle'模块用于序列化它)。所以这就是它的全部。所以每当我们谈论 'deserialized' RDD 时,我们总是指内存中的 RDD。理想情况下,他们应该将其称为非序列化而不是反序列化,以避免混淆,但无论如何。序列化的 RDD 总是指的是写入(缓存)到磁盘的内容。