当前位置: 首页 > 知识库问答 >
问题:

在Apache Spark中捕获自定义异常

卫劲
2023-03-14
ds.foreach(
        entry=> {
          validate(entry)
        })
case customException : CustomException =>
    //is never catched
case exception : SparkException =>
    //can be catched

有什么想法吗?

共有1个答案

孔阎宝
2023-03-14

与其匹配基异常,不如尝试匹配原因:

import org.apache.spark.rdd.RDD

def ignoreArithmeticException(rdd: RDD[java.lang.Integer]) = try {
  rdd.foreach(1 / _)
} catch {
  case e: SparkException => e.getCause match  {
    case _: java.lang.ArithmeticException => 
      println("Ignoring ArithmeticException")
    case _ => throw e
  }
}

这将用于catch:

Try(ignoreArithmeticException(sc.parallelize(Seq(0))))
00/00/00 00:00:00 ERROR Executor: Exception in task 3.0 in stage 35.0 (TID 143)
java.lang.ArithmeticException: / by zero
    at
    ...
Ignoring ArithmeticException
res42: scala.util.Try[Unit] = Success(())

(虽然用了相当冗长的方式),但不会抓住:

Try(ignoreArithmeticException(sc.parallelize(Seq(null))))
00/00/00 00:00:00 ERROR Executor: Exception in task 3.0 in stage 38.0 (TID 155)
java.lang.NullPointerException
    at 
   ...
res52: scala.util.Try[Unit] =
Failure(org.apache.spark.SparkException: Job aborted due to stage failure: Task 3 in stage 38.0 failed 1 times, most recent failure: Lost task 3.0 in stage 38.0 (TID 155, localhost, executor driver): java.lang.NullPointerException ....
 类似资料:
  • "CATCH"应该严格地在"扔"之后叫吗?" 例1: 错误: 找不到方法“接收器”:没有方法缓存,也没有^在/tmp/739536251/main块中查找_方法。pl6第11行 例2: 无误

  • 我使用的是SpringBoot2.3。我遇到了一些例外情况。我想使用类在全局级别捕获异常。我能够捕获验证错误并返回自定义错误响应,但Spring似乎忽略了我的方法。这是我的课程: andler.java 下面是我抛出异常的方法: PhotoStorageServiceImp.java PhotoUploadController.java } 我在检索照片时遇到错误

  • 我有以下try块: 我想从捕获潜在的错误。经过反复试验,我能够生成一个潜在错误列表,这些错误可以通过打印它们的类型(e)由触发。__name__值: 但是如果我尝试将我的except语句从修改为,我将得到一个错误,即未定义。 我尝试定义一个类扩展为它,大多数教程/问题在这里建议,基本上: 现在这个变量已被识别,但由于我无法控制将引发的错误,因此我无法在我的初始try块中真正引发该异常。 理想情况下

  • 问题内容: 我想在球衣休息服务中捕获所有意外的异常。因此我写了一个ExceptionMapper: 映射器实际上捕获了所有异常。因此,我不能写: 这是由映射器捕获的。现在我要写: 这是捕获所有意外异常并还返回球衣中的错误(错误代码)的正确方法吗?还是还有其他(更正确的)方法? 问题答案: 有一个我们可以从中得到的。因此,您可以在映射器中检查。也许像 这样,thrown 的实例将只返回默认响应。实际

  • 我希望捕捉一些jackson异常,这些异常发生在我正在开发的spring-boot API中。例如,我有下面的request类,我想捕获当JSON request对象中的“QuarmissionAireResponse”键为null或空白(即request对象中的)时发生的错误。 导致此Jackson错误: 是否有一种方法来捕获和处理这些异常(在示例中JsonRootName是null/inval

  • 这是由映射器捕获的。现在我要写: 这是捕捉所有意外异常并返回Jersey错误(错误代码)的正确方法吗?或者还有其他(更正确的)方式吗?