下面是http://www.eecs.berkeley.edu/Pubs/TechRpts/2014/EECS-2014-12.pdf的一个示例。
lines = spark.textFile("hdfs://...")
errors = lines.filter(_.startsWith("ERROR"))
errors.persist()论文系统:“注意到基本的RDD (行)没有加载到内存中,这是可取的,因为错误消息可能只是数据的一小部分(小到足以容纳内存)”。
我的问题是如何判断RDD是否会加载到ram中?
发布于 2015-03-06 07:56:11
你的问题不对。如果您告诉引擎这样做,RDD将被加载到RAM中,引擎不会抱怨您的代码。为了使它只需将RDD标记为用cache()或persist()缓存,然后调用它上的一个操作--它将被缓存。
正确的一个是“如何判断是否缓存RDD?”。在以下情况下,应该缓存RDD:
如果重新计算数据真的很昂贵,您可能会考虑不仅在内存中,而且使用MEMORY_AND_DISK持久化级别--这样即使您没有足够的内存而不是删除RDD分区并稍后重新计算它们,引擎也会将它们放到RDD上。此外,您还可以考虑将数据持久化到存储在本例中,例如使用saveAsSequenceFile()。
在这个特定的例子中,lines RDD没有被缓存,因为它只使用过一次,它很大,并且可以很容易地从存储中重新读取。虽然errors RDD是计算出来的,而且很小,而且在将来他们计划在上面运行一系列的操作,所以缓存它是很好的。
https://stackoverflow.com/questions/28889580
复制相似问题