什么" RDD可以存储在内存中#34;在Spark中意味着什么

时间:2014-09-10 08:01:14

标签: mapreduce apache-spark

在Spark的介绍中,它说

RDDs can be stored in memory between queries without requiring replication

据我所知,您必须使用.cache().persist()手动缓存RDD。如果我不采取任何措施,如下所示

   val file = sc.textFile("hdfs://data/kv1.txt")
   file.flatMap(line => line.split(" "))
   file.count()

我不会坚持RDD"文件"在缓存或磁盘中,在这种情况下,Spark可以更快地运行 比MapReduce?

2 个答案:

答案 0 :(得分:4)

Spark会在计算的每个阶段计算,按分区进行计算。它会暂时将一些数据保存在内存中以完成其工作。它可能必须将数据溢出到磁盘并通过网络传输以执行某些阶段。但这些都不是(必然)持久的。如果再次count(),它将从头开始。

这不是Spark比MapReduce运行得更快的情况;对于像这样的简单操作,它可能较慢。实际上,没有任何关于这可以从加载到内存中受益。

更复杂的例子,比如使用非平凡的管道或重复访问RDD,可以从内存中持久存储,甚至在磁盘上获益。

答案 1 :(得分:2)

是的tonyking,毫无疑问它会比MapReduce运行得更快。 Spark将所有RDD处理为内存,每次对其进行操作时,每个转换后的RDD都可以重新计算。但是,您也可以使用持久化(或缓存)方法在内存中保留RDD,在这种情况下,Spark会在群集上保留元素,以便在下次查询时更快地访问。还支持在磁盘上保留RDD,或在多个节点之间复制。

http://spark.apache.org/docs/latest/programming-guide.html

“这在重复访问数据时非常有用,例如查询小型”热“数据集或运行像PageRank这样的迭代算法时”

你的问题的答案:“什么”RDD可以存储在内存中“在Spark中意味着什么?”我们可以使用.cache()在RAM中存储一个RDD而无需重新计算(当我们对它应用操作时)。