如何判断一个RDD是否会加载到ram中?
How to judge if a RDD will load into ram ?
http://www.eecs.berkeley.edu/Pubs/TechRpts/2014/EECS-2014-12.pdf的例子如下
lines = spark.textFile("hdfs://...")
errors = lines.filter(_.startsWith("ERROR"))
errors.persist()
论文系统:“请注意,基本 RDD 行未加载到 RAM 中。这是可取的,因为
错误消息可能只是数据的一小部分(小到足以放入
内存)"
我的问题是如何判断一个RDD是否会加载到ram中?
你的问题不正确。如果您告诉引擎这样做,RDD 将被加载到 RAM 中,引擎不会抱怨您的代码。要使其只需将 RDD 标记为使用 cache()
或 persist()
进行缓存,然后对其调用操作 - 它将被缓存。
正确的是"how to judge whether to cache RDD or not?"。如果出现以下情况,则应缓存 RDD:
- 您计划运行基于此数据的一系列操作
- 重新计算此数据的成本很高。这可能是密集计算、连接等的一些结果。
如果重新计算数据真的很昂贵,您可以考虑不仅将其持久化在内存中,还可以使用 MEMORY_AND_DISK 持久化级别 - 这样即使您没有足够的 RAM 而不是逐出 RDD 分区稍后重新计算它们,引擎会将它们放在 HDD 上。在这种情况下,您也可以考虑将数据保存到存储中,例如 saveAsSequenceFile()
在这种特定情况下 lines
RDD 没有被缓存,因为它只使用一次,它很大并且可以很容易地从存储中重新读取。虽然 errors
RDD 的计算量很小,但他们计划在其上进行 运行 一系列操作,因此最好将其缓存
http://www.eecs.berkeley.edu/Pubs/TechRpts/2014/EECS-2014-12.pdf的例子如下
lines = spark.textFile("hdfs://...")
errors = lines.filter(_.startsWith("ERROR"))
errors.persist()
论文系统:“请注意,基本 RDD 行未加载到 RAM 中。这是可取的,因为 错误消息可能只是数据的一小部分(小到足以放入 内存)"
我的问题是如何判断一个RDD是否会加载到ram中?
你的问题不正确。如果您告诉引擎这样做,RDD 将被加载到 RAM 中,引擎不会抱怨您的代码。要使其只需将 RDD 标记为使用 cache()
或 persist()
进行缓存,然后对其调用操作 - 它将被缓存。
正确的是"how to judge whether to cache RDD or not?"。如果出现以下情况,则应缓存 RDD:
- 您计划运行基于此数据的一系列操作
- 重新计算此数据的成本很高。这可能是密集计算、连接等的一些结果。
如果重新计算数据真的很昂贵,您可以考虑不仅将其持久化在内存中,还可以使用 MEMORY_AND_DISK 持久化级别 - 这样即使您没有足够的 RAM 而不是逐出 RDD 分区稍后重新计算它们,引擎会将它们放在 HDD 上。在这种情况下,您也可以考虑将数据保存到存储中,例如 saveAsSequenceFile()
在这种特定情况下 lines
RDD 没有被缓存,因为它只使用一次,它很大并且可以很容易地从存储中重新读取。虽然 errors
RDD 的计算量很小,但他们计划在其上进行 运行 一系列操作,因此最好将其缓存