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
Acessing变量在scala中声明为内部匹配外部_Scala_Apache Spark_Apache Spark Sql - Fatal编程技术网

Acessing变量在scala中声明为内部匹配外部

Acessing变量在scala中声明为内部匹配外部,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我正在使用try-and-catch方法捕获异常,同时使用下面的代码读取数据帧中的文件 import scala.io.StdIn import scala.util.{Try, Success, Failure} import org.apache.spark.sql.DataFrame import org.apache.spark.sql.functions._ import org.apache.spark.sql.types._ val filename = "s3a://bucke

我正在使用try-and-catch方法捕获异常,同时使用下面的代码读取数据帧中的文件

import scala.io.StdIn
import scala.util.{Try, Success, Failure}
import org.apache.spark.sql.DataFrame
import org.apache.spark.sql.functions._
import org.apache.spark.sql.types._

val filename = "s3a://bucketname/moving/file.csv"

def CustomSchemaDataFrame(fileName: String):Try[DataFrame] = {

try {
     val df_custom_schema = spark.read.format("csv").option("header", "true").load(filename) 
      Success(df_custom_schema)
    } catch {
      case unknown: Exception => {
        println(s"Unknown exception: $unknown")
        Failure(unknown)
      }
    }
  }

CustomSchemaDataFrame(filename) match {
  case Success(df_custom_schema) => {
      println("File Read Successfully")
      df_custom_schema.printSchema()
      df_custom_schema.show(true)
  }
  case Failure(ex) => {
      println("error code", ex)
  }
}

接下来我要执行的是进一步导出df_custom_schema out-side-match以执行out-side-match循环操作

下面是这样的东西

CustomSchemaDataFrame(filename) match {
  case Success(df_custom_schema) => {
      println("File Read Successfully")
      df_custom_schema.printSchema()
      df_custom_schema.show(true)
     val custom_schema = df_custom_schema
  }
  case Failure(ex) => {
      println("error code", ex)
  }
}

custom_schema.printSchema()

当我在内部使用上述自定义_schema.printSchema()时,匹配它的工作状态良好,但当我试图在抛出错误之外访问它时。是否有一种方法可以访问外部匹配情况下的值。因为我想在此数据帧上执行其他几个操作

问候
mahi

你为什么不能写:

val custom_schema= CustomSchemaDataFrame(filename)

custom_schema match {
  case Success(df_custom_schema) => {
      println("File Read Successfully")
      df_custom_schema.printSchema()
      df_custom_schema.show(true)
     val custom_schema = df_custom_schema
  }
  case Failure(ex) => {
      println("error code", ex)
  }
}

custom_schema.get.printSchema()
当然,您可能需要检查自定义_模式是否成功

if ( custom_schema.isSuccess )
  custom_schema.get.printSchema

不可以。您不能访问模式匹配案例中的值。它是该函数范围的局部变量

您需要做的是返回模式匹配的结果并继续处理该结果

但是,这没有多大意义,因为您必须从
成功
失败
块返回有效的内容,然后使用
recoverWith
可能会更好

所以通常你会做一些类似的事情

试试看{
spark.read.format(“csv”).选项(“标头”、“true”).加载(文件名)
}匹配{
案例成功率(df)=>
// ...
//在这里完成所有与df相关的成功工作
// ...
案例失败(t)=>
println(t)
}
或者,如果在失败的情况下,您需要某种默认设置

试试看{
spark.read.format(“csv”).选项(“标头”、“true”).加载(文件名)
}.恢复{
案例t=>
println(t)
成功(DefaultDF())
}.map{df=>
//在这里做事
}

引发了哪个错误?感谢输入gtosto,我还需要获取模式的全部数据,以便对其执行一些操作。如何获得上面的内容是只生成带有
custom\u schema的schema。get
您将获得函数
CustomSchemaDataFrame