.persist()行有时会导致Java Out of Heap Space错误

时间:2016-08-30 18:06:38

标签: python apache-spark pyspark elastic-map-reduce

据我所知,当您使用.persist()时,编写行persist仅设置持久性级别,然后脚本中的下一个action将导致实际的持久性工作被调用。

但是,有时,似乎取决于数据帧,persist()将导致Java出堆空间错误。

持久化的预期行为是什么,为什么这条简单的行实际上会导致此内存错误?

1 个答案:

答案 0 :(得分:3)

RDD Persistence的重点是将中间结果存储在内存中,以便在后续使用时更快地访问。有几种不同级别的持久性,范围从Offline work(默认),MEMORY_ONLYMEMORY_AND_DISK。纯粹保留在内存中意味着必须有足够的堆空间才能使持久化工作。如果你的堆内存不足,你可以

  • 寻求较低的持久性水平,
  • 减小分区的大小,
  • 减少持久RDD阶段的总数,例如DISK_ONLY

找到合适的平衡是Spark在内存和CPU使用之间实现良好折衷的主要挑战之一。