在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?
答案 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而无需重新计算(当我们对它应用操作时)。