持久化后看不到 Spark RDD
Posted
技术标签:
【中文标题】持久化后看不到 Spark RDD【英文标题】:Do not see Spark RDDs after persist 【发布时间】:2016-01-16 13:31:45 【问题描述】:我使用的是 Spark 1.2.0,并且没有显式配置 SPARK_LOCAL_DIRS,因此假设持久化的 RDD 会转到 /tmp。我正在尝试使用以下代码持久化和 RDD:
val inputRDD=sc.parallelize(List(1,2,3,3,4,5,6,7,8,9,19,22,21,25,34,56,4,32,56,70))
val result = inputRDD.map(x=>x*x)
println("Result count is: "+result.count())
result.persist(StorageLevel.DISK_ONLY)
println(result.collect().mkString(",,"))
println("Result count is: "+result.count())
我在我的 RDD 之前和之后强制一个 count() 来确定,但我仍然没有在 /tmp 中看到任何新文件或目录。当我运行我的代码时,唯一改变的目录是 hsperfdata.... 我知道它是用于 JVM 性能数据的。
我的持久化 RDD 去哪儿了?
【问题讨论】:
你的集群配置是什么? 我自己没有配置集群。使用 IntelliJ for Scala 并且刚刚将 Spark 库链接到我的项目。我还在学习所以还没有开始配置 spark-env.sh 文件。 开始阅读官方文档!我相信你缺少一些基本的概念理解。 【参考方案1】:来自scaladoc of RDD.persist()
设置此 RDD 的存储级别以在第一次计算后跨操作保留其值。如果 RDD 还没有设置存储级别,这只能用于分配新的存储级别。本地检查点是一个例外。
所以您已经在result.persist()
上方的行中调用了result.count()
,此时Spark 已经将result
s 持久性设置为默认值。删除 count
操作并重试。
【讨论】:
我发现了问题。由于我使用的是 IDE,因此我的 SparkContext 在程序结束时被销毁,并用它清理所有数据。在我尝试在命令行上坚持之后(保持上下文活跃,我可以看到 RDD) 我不认为持久化的 RDD 会持续运行你的程序,在 REPL 中这是有道理的,但在 IDE 中运行 Scala 是有道理的,当程序完成时它就消失了。检查日志,您可能会看到最后是否清理。您需要导出一个文本文件(或 HDFS 等)。以上是关于持久化后看不到 Spark RDD的主要内容,如果未能解决你的问题,请参考以下文章