我运行一个spark应用程序,它使用StorageLevel.OFF_HEAP来持久化rdd(我的tachyon和spark都处于本地模式)。
像这样:val lines = sc.textFile("FILE_PATH/test-lines-1")
val words = lines.flatMap(_.split(" ")).map(word => (word, 1)).persist(StorageLevel.OFF_HEAP)
val counts = words.reduceByKey(_ + _)
counts.collect.foreach(println)
...
sc.stop
当坚持完成后,我可以从localhost:19999(tachyon的网页用户界面)看到我的OFF_HEAP文件,这就是我的例外情况。
但是,在火花应用程序结束后(sc.stop,但是tachyon工作),我的块(OFF_HEAP rdd)被删除了。我无法从localhost:19999找到我的文件。这不是我想要的。 我认为这些文件在persist()方法之后属于Tachyon(不是spark),它们不应该被删除。
那么,谁删除了我的文件,何时? 这是正常的方式吗?
答案 0 :(得分:2)
您正在寻找
saveAs[Text|Parquet|NewHadoopAPI]File()
这是您需要的真正“持久”方法。
相反
persist()
用于RDD的中间存储:当火花过程结束时,它们将被移除。这是源代码注释:
- 设置此RDD的存储级别,以便在第一次操作后将其值保持在操作之间 它是计算的。
重要的短语是 跨操作 - 这是处理(仅限)的一部分。