我正在学习Apache,并试图清除与Spark中RDDs的缓存和持久性相关的概念。
因此,根据“学习火花”一书中关于持之以恒的文献:
为了避免多次计算RDD,我们可以要求Spark将数据持久化。当我们要求Spark持久化一个RDD时,计算RDD的节点会存储它们的分区。火花有很多层次的坚持,可以根据我们的目标来选择。 在Scala和Java中,默认的()将将数据存储在JVM堆中,作为非序列化对象()。在Python中,我们总是对持久化存储的数据进行序列化,因此默认的数据作为腌制对象存储在JVM堆中。当我们将数据写入磁盘或堆外存储时,这些数据也总是被序列化的。
但是为什么是--默认的()将把数据存储在JVM堆中,作为非序列化对象()。
发布于 2017-12-08 11:20:27
因为没有序列化和反序列化开销,因此可以在不需要额外内存的情况下加载低成本操作和缓存数据。SerDe是昂贵的,并且大大增加了总体成本。在最坏的情况下,保持序列化和反序列化对象(特别是使用标准Java序列化)可以使内存使用量增加一倍。
https://stackoverflow.com/questions/47712382
复制相似问题