我试图找到一个很好的答案,为什么RDD的默认持久化是MEMORY_ONLY
,而对于Dataset则是MEMORY_AND_DISK
。但我找不到。
有人知道为什么默认的持久化级别不同吗?
发布于 2018-09-01 20:02:32
对于rdd,持久化api的默认存储级别是内存,数据集的默认存储级别是MEMORY_AND_DISK。
请检查以下内容
星星之火-3824组内存中表默认存储级别为MEMORY_AND_DISK
正如@user6910411所提到的,Spark目前使用MEMORY_ONLY作为默认格式。然而,由于使用了列缓冲区,不得不重新计算块要付出巨大的代价,“,即dataset/dataframe使用列缓冲区存储原始数据的列数据类型和列详细信息,因此,在缓存数据时不适合内存的情况下,它将不会缓存其余的分区,并且在发生dataset/dataframe的情况下,无论何时needed.So都会重新计算,与rdd相比,由于其柱状structure.So,默认的持久化选项改为MEMORY_AND_DISK,这样,不适合内存的块就会溢出到磁盘中,并在需要时从磁盘检索,而不是下次重新计算。
发布于 2018-09-01 17:03:08
仅仅因为MEMORY_ONLY
很少有用--在实践中,没有足够的内存来存储所有所需的数据,所以您通常只需要部分地排除一些块或缓存数据。
与此相比,DISK_AND_MEMORY
将数据驱逐到磁盘,因此不会丢失缓存块。
选择MEMORY_AND_DISK
作为默认缓存模式的确切原因是,火花-3824 (Spark默认情况下应该在MEMORY_AND_DISK
中缓存):
Spark当前使用MEMORY_ONLY作为默认格式。然而,由于使用了列缓冲区,因此必须重新计算块要花费很大的代价,这比Spark内核的成本要高得多。特别是现在我们对缓存块比较保守,有时不会缓存我们认为可能超过内存的块,默认情况下将持久化块保存在磁盘上似乎更好。
https://stackoverflow.com/questions/52130014
复制相似问题