我有一个非常典型的RDD场景,我收集一些数据,持久化它,然后多次使用持久化的RDD进行各种转换。持久化的速度要快上一个数量级,所以持久化是绝对必要的。
但我对不同坚持方法的相对速度感到惊讶。如果我坚持使用MEMORY_AND_DISK
,那么每次后续使用持久化的RDD所需的时间比我使用MEMORY_ONLY
多10%左右。为什么会这样呢?如果数据可以放入内存,我会期望它们具有相同的速度;如果某些分区无法放入内存,我希望MEMORY_AND_DISK
会更快。为什么我的计时总是不能证明这是真的?
发布于 2017-08-18 00:43:53
您的CPU通常以大约10 Gb/s的速度访问内存,而对固态硬盘的访问需要600Mb/s,当选择MEMORY_ONLY时,不适合内存的分区将使用父rdds分区重新计算。如果您没有广泛的依赖,这应该是可以的
发布于 2017-08-18 01:51:03
没有上下文是不可能判断的,但至少有两种情况下MEMORY_AND_DISK
MEMORY_AND_DISK
分区将存储在disk.MEMORY_AND_DISK
,将存储在磁盘上,对于MEMORY_ONLY
,将丢失,必须重新计算,并且逐出可能会触发大型GC扫描。最后,您必须记住,_DISK
可以使用不同级别的硬件和软件缓存,因此访问不同块的速度可能与主内存相当。
https://stackoverflow.com/questions/45739781
复制相似问题