Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何读取检查点RDD_Scala_Apache Spark - Fatal编程技术网

Scala 如何读取检查点RDD

Scala 如何读取检查点RDD,scala,apache-spark,Scala,Apache Spark,这个问题并不是什么新鲜事,但经过大量的谷歌搜索和运气不佳,我把这个问题发布在这里 sc.setCheckpointDir("C:\\mydrive\\Checkpoint") val data = Seq(1,2,3,4,5,6,7,8,9) val base = sc.parallelize(data) base.checkpoint() base.collect().foreach { println(_) } 我上面的代码没有检查点,但我不确定代码是否从后续运行中读取

这个问题并不是什么新鲜事,但经过大量的谷歌搜索和运气不佳,我把这个问题发布在这里

sc.setCheckpointDir("C:\\mydrive\\Checkpoint")
val data = Seq(1,2,3,4,5,6,7,8,9)
val base = sc.parallelize(data)
base.checkpoint()
base.collect().foreach { println(_) }
我上面的代码没有检查点,但我不确定代码是否从后续运行中读取数据。请查找日志详细信息

17/05/17 15:37:48调试可靠检查点RDD:无分区程序文件

17/05/17 15:37:48信息可靠RDDCheckpointData:完成检查点 RDD 0至 文件:/C:/mydrive/Checkpoint/d10861cd-70c3-4e60-bdd3-a4753dfee1b2/rdd-0, 新父级是RDD 1

日志给我的印象是,它不是在后续运行中读取检查点数据,而是在写入。如果是这种情况,如何在后续运行中读取检查点数据?这里我遗漏了什么?

当重复使用检查点RDD但它是惰性的,并且如果RDD没有持久化,检查点将自动使用

由于您的管道是完全线性的,并且您不重用RDD,因此它几乎毫无用处。

检查点是一个截断RDD沿袭图并将其保存到可靠的分布式HDFS或本地文件系统的过程。 有两种类型的检查点:

可靠-在Spark core中,RDD检查点将实际的中间RDD数据保存到可靠的分布式文件系统, e、 g.人类发展基金

local-in-Spark流或GraphX-RDD检查点截断RDD沿袭图

由Spark应用程序开发人员决定何时以及如何使用RDD.checkpoint方法进行检查点。 在使用检查点之前,Spark开发人员必须使用SparkContext.setCheckpointDirdirectory:String方法设置检查点目录

可靠检查点

您可以调用SparkContext.setCheckpointDirdirectory:String来设置检查点目录—RDD检查点所在的目录。如果在群集上运行,则目录必须是HDFS路径。原因是驱动程序可能试图从自己的本地文件系统重建检查点RDD,这是不正确的,因为检查点文件实际上在执行器机器上

您可以通过调用RDD.checkpoint将RDD标记为检查点。RDD将保存到检查点目录中的一个文件中,对其父RDD的所有引用都将被删除。在此RDD上执行任何作业之前,必须调用此函数

强烈建议在内存中持久化检查点RDD,否则将其保存在文件中需要重新计算

假设您持久化了RDD命名用户,要使用保留的RDD按名称调用,请参阅下面的代码段:

import com.typesafe.config.Config
import org.apache.spark.SparkContext, SparkContext._
import org.apache.spark.rdd.RDD

trait UsersSparkJob extends spark.jobserver.SparkJob with spark.jobserver.NamedRddSupport with UsersRDDBuilder {
  val rddName = "users"


  def validate(sc: SparkContext, config: Config): spark.jobserver.SparkJobValidation = spark.jobserver.SparkJobValid
}

object GetOrCreateUsers extends UsersSparkJob {

  override def runJob(sc: SparkContext, config: Config) = {
    val users: RDD[(Reputation, User)] = namedRdds.getOrElseCreate(
      rddName,
      build(sc))

    users.take(5)
  }
}

感谢您的回复。如果我需要在应用程序生命周期内重用RDD,我将使用缓存。我尝试的是,当我第一次运行代码时,它应该检查数据。从第二次开始,它应该读取检查点数据并准备RDD。感谢您的回复。如果我需要在应用程序生命周期内重用RDD,我将使用缓存。我尝试的是,当我第一次运行代码时,它应该检查数据。从第二次开始,它应该读取检查点数据并准备RDD。这是可能的吗?是的,这是可能的,但需要对象共享,其中一个解决方案是感谢您提供的信息。如果您建议我一种阅读检查点文件的方法会更好。添加了一种方法,您可以针对自己的情况进行调查和处理。确定。有帮助