Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 为什么序列化的持久化RDD比反序列化的持久化RDD占用更少的内存_Apache Spark_Rdd - Fatal编程技术网

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

Apache spark 为什么序列化的持久化RDD比反序列化的持久化RDD占用更少的内存,apache-spark,rdd,Apache Spark,Rdd,我了解到,当RDD通过某种序列化(无论是默认Java序列化还是类似Kryo序列化)持久化在内存中时,它在内存中占用的空间会更少。我对序列化的理解是,它只是一种将内存中的Java对象转换为一系列位的方法,而反序列化实际上是将这些位作为对象放入内存的过程。所以我总是认为反序列化是将作为一个对象从一系列位带回内存。因此,将某些内容存储为反序列化数据这一术语让我感到困惑。对我来说,存储(作为一系列位)是序列化,检索是反序列化。所以我真的无法想象将某些东西存储为反序列化数据意味着什么。正因为如此,我也无法

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

我自己找到了答案,所以考虑发布它,因为它可能会帮助陷入类似困惑的人

“存储为反序列化对象”的整个混乱是由我所指的那本书中对它的解释方式造成的


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

序列化并不意味着存储介质。i、 您可以序列化内存中的对象。另请参阅Spark文档:序列化RDD如何在内存中占用更少的空间?请看堆外存储,这是RAMGood中的一个序列化存储问题,但我看不到关于序列化RDD占用更少内存的原因的答案?