Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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和Dataset的不同默认持久性_Apache Spark - Fatal编程技术网

Apache spark Rdd和Dataset的不同默认持久性

Apache spark Rdd和Dataset的不同默认持久性,apache-spark,Apache Spark,我试图找到一个很好的答案,为什么RDD的默认persist是MEMORY_ONLY,而数据集MEMORY_和磁盘的默认persist。但是找不到它。我想知道你们当中是否有人知道背后的原因 感谢仅仅因为内存\u ONLY很少有用-实际上,拥有足够的内存来存储所有所需的数据并不常见,因此您通常需要逐出一些块或仅部分缓存数据 与之相比,磁盘和内存将数据逐出磁盘,因此不会丢失缓存块 选择MEMORY\u和\u DISK作为默认缓存模式的确切原因解释如下:(默认情况下,Spark SQL应该缓存在MEMO

我试图找到一个很好的答案,为什么RDD的默认persist是MEMORY_ONLY,而数据集MEMORY_和磁盘的默认persist。但是找不到它。我想知道你们当中是否有人知道背后的原因


感谢仅仅因为
内存\u ONLY
很少有用-实际上,拥有足够的内存来存储所有所需的数据并不常见,因此您通常需要逐出一些块或仅部分缓存数据

与之相比,磁盘和内存将数据逐出磁盘,因此不会丢失缓存块

选择
MEMORY\u和\u DISK
作为默认缓存模式的确切原因解释如下:(默认情况下,Spark SQL应该缓存在
MEMORY\u和\u DISK
中):

Spark SQL目前仅将内存_用作默认格式。然而,由于使用列缓冲区,重新计算块的成本非常巨大,远高于Spark core。特别是因为现在我们对缓存块比较保守,而且有时不会缓存我们认为可能会超出内存的块,所以默认情况下最好将持久化块保留在磁盘上


对于rdd,持久化api的默认存储级别是内存,而对于dataset,默认存储级别是内存和磁盘

请检查以下内容

[SPARK-3824][SQL]将内存表中的默认存储级别设置为内存和磁盘

正如@user6910411所提到的“Spark SQL目前仅使用内存作为默认格式。但是,由于使用列缓冲区,重新计算块的成本非常高,远高于Spark core。”也就是说,dataset/dataframe API使用列缓冲区来存储关于原始数据的列datattype和列详细信息,因此,如果缓存数据不适合内存,那么它将不会缓存分区的其余部分,并在需要时重新计算。因此,在dataset/dataframe的情况下,由于以下原因,与rdd相比,重新计算的成本更高:因此,默认的persist选项更改为MEMORY_和_DISK,这样不适合内存的块将溢出到磁盘,并在需要时从磁盘检索,而不是下次重新计算