Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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
用于加载RDD或捕获错误并创建RDD的Scala代码模式?_Scala_Apache Spark - Fatal编程技术网

用于加载RDD或捕获错误并创建RDD的Scala代码模式?

用于加载RDD或捕获错误并创建RDD的Scala代码模式?,scala,apache-spark,Scala,Apache Spark,我想加载一个RDD,或者如果加载失败,创建RDD。我认为下面的代码可以工作,但即使sc.textFile()在try块中,它仍然失败。我遗漏了什么,或者如何正确地做到这一点?谢谢 // look for my RDD, load or make it val rdddump = "hdfs://localhost/Users/data/hdfs/namenode/myRDD.txt" val myRdd = try { sc.textFile(rdddump) } catch { ca

我想加载一个RDD,或者如果加载失败,创建RDD。我认为下面的代码可以工作,但即使sc.textFile()在try块中,它仍然失败。我遗漏了什么,或者如何正确地做到这一点?谢谢

// look for my RDD, load or make it 
val rdddump = "hdfs://localhost/Users/data/hdfs/namenode/myRDD.txt"
val myRdd = try {
  sc.textFile(rdddump)
} catch {
  case _ : Throwable => {
    println("failed to load RDD from HDFS")
    val newRdd = [....code to make new RDD here...]
    newRdd.saveAsTextFile(rdddump)
    newRdd
  }
}

println(myRdd)
println("RDD count = " + myRdd.count)
错误如下所示

org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://localhost/Users/data/hdfs/namenode/myRDD.txt
at org.apache.hadoop.mapred.FileInputFormat.listStatus(FileInputFormat.java:251)
at org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:270)
at org.apache.spark.rdd.HadoopRDD.getPartitions(HadoopRDD.scala:175)
at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:204)
at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:202)
at scala.Option.getOrElse(Option.scala:120)
at org.apache.spark.rdd.RDD.partitions(RDD.scala:202)
at org.apache.spark.rdd.MappedRDD.getPartitions(MappedRDD.scala:28)
at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:204)
at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:202)
at scala.Option.getOrElse(Option.scala:120)
at org.apache.spark.rdd.RDD.partitions(RDD.scala:202)
at org.apache.spark.SparkContext.runJob(SparkContext.scala:1097)
at org.apache.spark.rdd.RDD.count(RDD.scala:861)
...

您在错误的位置捕获了异常,堆栈跟踪清楚地显示了该异常。调用
sc.textFile
除了声明某个操作和RDD之间的关系外,什么都不做。例如,没有任何东西会触发计算,从而导致它检查输入是否存在。

您在错误的位置捕获了异常,堆栈跟踪清楚地显示了该异常。调用
sc.textFile
除了声明某个操作和RDD之间的关系外,什么都不做。例如,没有任何东西会触发计算,从而导致它检查输入是否存在。

是的,当执行myRdd关系以获取计数时,由于最后一行代码而发生异常。我原以为这一尝试仍然有效。有没有办法在try/catch中强制执行或以其他方式解决问题?谢谢你必须执行一个操作,比如计数。您可以这样做只是为了引出错误。但这样做会浪费精力。相反,尝试捕获对计数的“真实”调用?是的,当执行myRdd关系以获取计数时,由于最后一行代码而发生异常。我原以为这一尝试仍然有效。有没有办法在try/catch中强制执行或以其他方式解决问题?谢谢你必须执行一个操作,比如计数。您可以这样做只是为了引出错误。但这样做会浪费精力。相反,试着抓住你的“真实”电话来计数?