Acessing变量在scala中声明为内部匹配外部
我正在使用try-and-catch方法捕获异常,同时使用下面的代码读取数据帧中的文件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
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