spark dataframe中的save()方法

hfwmuf9z  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(628)

大家好,我正在使用spark scala中的save方法将Dataframe保存在表中。在我的代码中,我必须在代码中提到,如果这个save stmt成功完成,那么我需要执行下一步,但是这个save方法在成功加载数据后没有给出任何真假值,因此我无法在if stmt中写入查询结果对还是错。有没有办法确定它是否成功完成?
如果我传递了任何错误的细节,比如databasename或者错误的tablename,那么它也会显示结果:unit=(),所以我无法识别失败的案例或者传递案例。

val result=df.write.format("com.hortonworks.spark.sql.hive.llap.HiveWarehouseConnector").option("database","dbname").option("table","tablename").mode("append").save()

在下一个条件中,我需要检查结果值(成功或不成功)

i.e. if (result==true){
    next stsmt
    }
    else{
    exit
    }
wqnecbli

wqnecbli1#

save 方法总是返回类型 unit ,因为这个always else块将在if else语句中执行。
尝试使用if-else语句,而不是if-else语句 Try , Success & Failure . 在 Success 调用下一个函数& Failure 抛出错误或异常。更多信息请查看下面的代码。

Try { 
  df.write.format("orc").option("database","dbname").option("table","tablename").mode("append").save() 
} match {
 case Success(_) => // do your next steps.
 case Failure(ex) => // println ex.
}

失败

scala> df.show(false)
+--------+---+
|name    |age|
+--------+---+
|Srinivas|20 |
+--------+---+

scala> :paste
// Entering paste mode (ctrl-D to finish)

import scala.util._

Try {
  df.write.format("orc").option("database","dbname").option("table","tablename").mode("append").save() // I am not passing path to save method, It should throw an exception & will be catched inside Failure(ex)
} match {
 case Success(_) => // do your next steps.
 case Failure(ex) => {
     println(s"Exception : ${ex}")
 }
}

// Exiting paste mode, now interpreting.
Exception : java.lang.IllegalArgumentException: Expected exactly one path to be specified, but got:

成功

scala> :paste
// Entering paste mode (ctrl-D to finish)

Try {
  df.write.format("orc").option("database","dbname").option("table","tablename").mode("append").save("/tmp/sampledf") // I have given path & It should save df & Success(_) should be invoked.
} match {
 case Success(_) => println("Success Block")
 case Failure(ex) => {
     println(s"Exception : ${ex}")
 }
}

// Exiting paste mode, now interpreting.

Success Block

scala>

相关问题