据我所知,当您使用.persist()
时,编写行persist
仅设置持久性级别,然后脚本中的下一个action
将导致实际的持久性工作被调用。
但是,有时,似乎取决于数据帧,persist()
将导致Java出堆空间错误。
持久化的预期行为是什么,为什么这条简单的行实际上会导致此内存错误?
答案 0 :(得分:3)
RDD Persistence的重点是将中间结果存储在内存中,以便在后续使用时更快地访问。有几种不同级别的持久性,范围从Offline work
(默认),MEMORY_ONLY
到MEMORY_AND_DISK
。纯粹保留在内存中意味着必须有足够的堆空间才能使持久化工作。如果你的堆内存不足,你可以
DISK_ONLY
。 找到合适的平衡是Spark在内存和CPU使用之间实现良好折衷的主要挑战之一。