在这一行中,哪个RDD正在被保存? dropResultsN或dataSetN?Apache Spark我在这里坚持什么?
dropResultsN = dataSetN.map(s -> standin.call(s)).persist(StorageLevel.MEMORY_ONLY());
问题是从Apache Spark timing forEach operation on JavaRDD一个次要的问题,在这里我仍然在寻找一个好的答案,如何最好地时间RDD创建的核心问题。
在这一行中,哪个RDD正在被保存? dropResultsN或dataSetN?Apache Spark我在这里坚持什么?
dropResultsN = dataSetN.map(s -> standin.call(s)).persist(StorageLevel.MEMORY_ONLY());
问题是从Apache Spark timing forEach operation on JavaRDD一个次要的问题,在这里我仍然在寻找一个好的答案,如何最好地时间RDD创建的核心问题。
dropResultsN
是持久性RDD(其是通过将dataSetN
映射到方法standin.call()
上而产生的RDD)。
我发现这是一个很好的例子,在由O'Reilly学习星火:
这是例如3-40。坚持()Scala中(假设Java是一样的)
import org.apache.spark.storage.StorageLevel
val result = input.map(x => x*x)
result.persist(StorageLevel.[<your choice>][1])
注意在学习星火:请注意,我们坚持()在RDD 的第一个动作之前调用。 persist()自己调用不会强制 评估。
我注意到在这个例子中persist是在下一行,我认为这比我的问题中的代码更清晰。
这也是我的想法,当我接过电话时,Spark(疯狂地)继续重新计算RDD,即使它应该包含在要在此应用程序中运行的任务的DAG中。如果你的回答包含了某些东西的链接并引用了某些内容,那将会很好。不需要深入了解我将要做的下一步的源代码。 – JimLohse
NVM先前的评论我在Learning Spark中找到了一个很好的例子,并发布了一个单独的答案 – JimLohse