如何判断RDD是否会加载到ram中?

时间:2015-03-05 23:07:07

标签: apache-spark rdd

http://www.eecs.berkeley.edu/Pubs/TechRpts/2014/EECS-2014-12.pdf的示例如下。

lines = spark.textFile("hdfs://...")
errors = lines.filter(_.startsWith("ERROR"))
errors.persist()

论文sys:" 请注意,基本RDD行不会加载到RAM中。这是可取的,因为 错误消息可能只是数据的一小部分(小到足以容纳) 存储器) "

我的问题是如何判断RDD是否会加载到ram中?

1 个答案:

答案 0 :(得分:1)

你的问题不正确。如果您告诉引擎这样做,RDD将被加载到RAM中,引擎不会抱怨您的代码。要使RDD标记为使用cache()persist()进行缓存,然后对其执行操作 - 它将被缓存。

正确的是“如何判断是否缓存RDD?”。如果出现以下情况,则应缓存RDD:

  1. 您计划在此数据之上运行一系列操作
  2. 重新计算这些数据非常昂贵。它可能是强烈计算,连接等的一些结果。
  3. 如果数据的重新计算成本非常高,您可能会考虑将其保留在内存中,但是使用MEMORY_AND_DISK持久性级别 - 即使您没有足够的RAM而不是驱逐RDD分区并在以后重新计算引擎将它们放在硬盘驱动器上。在这种情况下,您也可以考虑将数据保存到存储中,例如使用saveAsSequenceFile()

    在这种特定情况下lines RDD没有被缓存,因为它只使用一次,它很大,可以很容易地从存储中重新读取。虽然errors RDD计算得很小,但未来他们计划在其上运行一系列操作,因此最好将其缓存